2011-03-05 14 views
6

मैं एक सार्वभौमिक आईओएस आवेदन (iPad और iPhone) लिख रहा हूँ और वर्गों है कि दो क्षुधा के बीच साझा नहीं किया जा सकता है के लिए बड़े पैमाने पर लंबे नाम के साथ अपने आप को लगता है:नामकरण सम्मेलनों

FamilyViewController_iPhone.h/m 
FamilyViewControllerA_iPad.h/m 

DetailViewControllerB_iPhone.h/m 
DetailViewControllerB_iPad.h/m 

और वैसे ही , इन लोगों के अंदर कक्षाओं में मुख्य नाम (डिवाइस शामिल) मुख्य रूप से है ताकि इंटरफ़ेस बिल्डर आसानी से उनका उपयोग कर सके।

मैंने AControllerA.h और BControllerA.h जैसे कुछ मानते हैं जहां ए = आईफोन और बी = आईपैड लेकिन उस विकल्प के बारे में उत्साहित नहीं है।

आईओएस सार्वभौमिक अनुप्रयोग में इस तरह के वर्गों के लिए स्थायी सम्मेलन क्या है - या क्या मैं (उम्मीद है) इस आवश्यकता को रोकता हूं?

+0

अलग सोचें। – drudge

+0

शब्द :) तो - चालक यह है ... मैं आईपैड की अद्वितीय क्षमताओं का लाभ उठाना चाहता हूं। मैं आईपैड के ऐप को देखने के लिए आईपैड के ऐप को छेदना नहीं चाहता हूं, बस बीसीएस को प्रबंधित करना आसान है। इसलिए, कोई धारणा नहीं है, ऐप्स अलग दिख सकते हैं और अलग-अलग कार्य कर सकते हैं और अलग-अलग स्क्रीनफ्लो/जादूगर आदि हो सकते हैं - बस जानवर की प्रकृति। मुझे लगता है कि मैं कक्षाओं के लिए मूल रूप से अलग-अलग नामों का उपयोग कर सकता हूं और कक्षा के नाम में सामान्य कार्यक्षमता की पहचान करने की कोशिश भी नहीं करता ... –

उत्तर

1

मुझे यकीन नहीं है कि इसे संभालने का एक मानक तरीका है।

एक वर्ग क्लस्टर जैसी रणनीति का उपयोग करना एक संभावना है। यदि FamilyViewController_iPad और FamilyViewController_iPhone बहुत समान हैं, तो उन्हें एक अमूर्त FamilyViewController क्लास के उप-वर्ग बनाएं। -initWithNibName सेट करें: बंडल: FamilyViewController की विधि जैसे कि यह या तो आईपैड या ... आईफोन संस्करण का एक उदाहरण देता है, इस पर निर्भर करता है कि ऐप किस डिवाइस पर चल रहा है। अपने अधिकांश कोड में, आप केवल FamilyViewController से निपटेंगे। आपको अभी भी अपने निब्स में सबक्लास नाम का उपयोग करने की आवश्यकता होगी, लेकिन कम से कम आपका कोड पढ़ना आसान होगा।

+0

हाँ - यह निश्चित रूप से मेरा प्रारंभिक बिंदु है। बस यह सुनिश्चित न करें कि आपके पास एक संपादक व्यू के लिए मानक अभ्यास था या नहीं ... यह दोनों प्लेटफार्मों के बीच सिर्फ जंगली रूप से भिन्न है (आईफोन एक यूआईटीबलव्यू का उपयोग कर सकता है जबकि एक आईपैड एक फॉर्म की तरह रखे गए सभी फ़ील्ड के साथ कस्टम एक्सआईबी का उपयोग कर सकता है)। –

4

मुझे लगता है कि आप इस तरह की कार्यक्षमता को अलग करके एक खराब पथ का नेतृत्व कर रहे हैं। जबकि आईपैड ऐप्स स्पष्ट रूप से आपके आईफोन ऐप्स से अलग यूआई संरचनाएं और डिज़ाइन कर सकते हैं, लेकिन यदि आप यथासंभव यथासंभव बने रहने की कोशिश कर सकते हैं तो यह वास्तव में सबसे अच्छा है।

मैं अपने दृश्य नियंत्रकों में प्लेटफ़ॉर्म नामों का उपयोग करने से बचता हूं। मैं होगा:

FamilyViewController.h 
FamilyViewController.m 
FamilyViewController.xib (which is used for the iPad UI) 
FamilyViewController~iphone.xib 

आप सबसे अधिक संभावना iPhone और iPad दोनों के लिए अविश्वसनीय रूप से इसी तरह की सुविधा करने जा रहे हैं, या अगर एक ही नहीं, आप अभी भी ओवरलैप का एक बहुत होगा।

मैं कभी भी अपने व्यू कंट्रोलर को अपने टेबल नियंत्रकों के रूप में कार्य नहीं करता हूं। मैं उस कार्यक्षमता को अलग-अलग वस्तुओं में रखता हूं। इस तरह, यदि आईफोन ऐप में अलग-अलग स्क्रीन पर 2 या 3 टेबल हैं, लेकिन आईपैड एक ही स्क्रीन पर उन सभी 3 टेबलों को दिखाता है, तो आप उन तालिका नियंत्रकों में से प्रत्येक को तुरंत चालू कर सकते हैं और सभी कोड पुन: प्रयोज्य हैं।

+0

मुझे उपयोग के मामले से डर है जहां आईपैड के लिए विस्तार दृश्य की तरह कुछ आईफोन के विस्तार विवरण से जंगली रूप से भिन्न होता है। मैं अक्सर एक संपादक टेम्पलेट के रूप में आईफोन पर एक UITableView का उपयोग करता हूं - लेकिन मैं आमतौर पर आईपैड पर ऐसा नहीं करता हूं। UITableView को प्रबंधित करने के लिए तर्क एक व्यू कंट्रोलर के अंदर धक्का देने के लिए पागल हो जाएगा जो आईपैड के लिए एक बड़ी स्क्रीन XIB आधारित संपादक के लिए तर्क प्रबंधित करता है। आईपैड की बड़ी स्क्रीन का लाभ उठाने के लिए - मैं अक्सर बहुत अलग तर्क और स्क्रीनफ्लो के साथ समाप्त होता हूं। जैसा कि आपने वर्णन किया है वही कक्षाओं का पुन: उपयोग करना हमेशा साफ नहीं होता है। –

+0

सबसे पहले, मैंने कभी भी अपना टेबल डेटासोर्स नहीं रखा और कोड को नियंत्रक में प्रतिनिधि दिया। मैंने पाया है कि बस दर्द होने का इंतजार है। डेटासोर्स को तोड़ें और एक अलग वर्ग में बाहर निकलें। हां, कभी-कभी कार्यक्षमता बहुत अलग होती है। यदि ऐसा है, तो मैं दो IBAction विधियों को बनाउंगा और आईफोन xib और एक को आईपैड xib में बांध दूंगा। उन तरीकों की कार्यक्षमता में अभी भी कुछ बिट्स साझा करने में कोई संदेह नहीं होगा और मैं उन्हें अलग-अलग तरीकों से तोड़ने के लिए सुनिश्चित करता हूं ताकि उन्हें IBAction विधियों दोनों से बुलाया जा सके। –

2

आप, YourClass.xib और YourClass-iPad.xib साथ एक ही कक्षा YourClass उपयोग करने के लिए तो इस मैक्रो कि मैं का उपयोग की जाँच चाहते हैं: तो आप तो वर्ग खुद का उपयोग पाने के लिए कर सकते हैं

#define getXIB(s) ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? @"" #s "-iPad" :@"" #s) 

उचित XIB फ़ाइल:

YourClass * viewController = [[YourClass alloc] initWithNibName:getXIB(YourClass) bundle:nil];