2012-10-31 27 views
9

मैं xib फ़ाइलों के साथ सबकुछ विकसित कर रहा हूं क्योंकि हमें आईओएस 4 को समर्थन देने की आवश्यकता है।क्या स्टोरीबोर्ड आपको बदसूरत कोड लिखने के लिए मजबूर कर रहे हैं?

अब हम अंत में केवल iOS5 और iOS6 समर्थन कर रहे हैं, इसलिए मैं स्टोरीबोर्ड एक कोशिश देने का फैसला किया, तो सब कुछ ठीक है और आसान है, लेकिन मैं अपने आप को इस तरह कोड का एक बहुत कुछ कर पाया है:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"AddPlayer"]) { //Ugly 

     UINavigationController * navigationController = segue.destinationViewController; 
     PlayerDetailViewController * playerDetailsViewController = [navigationController viewControllers][0]; //Super Ugly 
     playerDetailsViewController.delegate = self; 
    } 
} 

मैं तुम्हारे बारे में लोगों को नहीं जानता, लेकिन मुझे यह कोड बहुत बदसूरत और त्रुटि प्रवण मिला।

स्टोरीबोर्ड के साथ काम करने का कोई बेहतर तरीका है? क्या मुझे xib फाइलों पर वापस जाना चाहिए?

+0

आप समझा सकते हैं क्यों तुम बदसूरत कहा? क्या आप if स्टेटमेंट की तुलना का जिक्र कर रहे हैं? –

+0

मुझे इतना बदसूरत नहीं लगता :) बस असामान्य – NeverBe

+1

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

उत्तर

6

मैंने स्टोरीबोर्ड के साथ काम किया जहां हमने बनाया था, आखिरी ऐप में जहां मैं काम करता हूं और हाँ, मैं सहमत हूं कि बॉयलरप्लेट कोड कुछ समय बाद बहुत परेशान हो जाता है, लेकिन जहां तक ​​मुझे पता है कि prepareForSegue पैरामीटर पास करने का एकमात्र तरीका है segues का उपयोग करते समय। आप स्टोरीबोर्ड से कस्टम व्यू कंट्रोलर पर गुण/प्रतिनिधि निर्दिष्ट नहीं कर सकते हैं।

  • मैं वापस XIB की अगर मैं केवल iOS 5 & 6 को लक्ष्य का उपयोग कर के लिए जाना होगा? यह पर निर्भर करता है।

अगर मुझे एक छोटा-मध्यम ऐप बनाना था (बहुत अधिक विचार नहीं थे और उनके बीच बहुत से क्रॉस-नेविगेशन नहीं थे) तो मैं निश्चित रूप से स्टोरीबोर्ड का उपयोग करता। लेकिन जब आपके पास बहुत सारे विचार हैं और उनके बीच बहुत पीछे की ओर नेविगेशन है, तो स्टोरीबोर्ड को अच्छी और साफ रखने के लिए यह वास्तव में जटिल हो जाता है, और ऐसा लगता है कि आप स्वयं को ऐसा कुछ उपयोग करने के लिए मजबूर कर रहे हैं जो वास्तव में सबसे अच्छा नहीं है।

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

तो संक्षेप में यह एक परियोजना शुरू करते समय आपकी आवश्यकताओं के अनुसार उबाल जाता है।

संपादित करें:

को ध्यान में रखना एक और बात: अगर आप SVN/Git या किसी अन्य VCS का उपयोग एक टीम के साथ काम करने के लिए, स्टोरीबोर्ड फ़ाइल विरोध एक कुल कुतिया हैं।

+2

+1। क्या ऐप्पल को नहीं लगता कि कई लोगों को सिर्फ स्टोरीबोर्ड संपादित करना पड़ सकता है? गीज़ –

+0

मेरे पास स्टोरीबोर्ड विवादों को ठीक करने से इतने सारे सिरदर्द हैं ... – jere

2

यह सिर्फ जानवर की प्रकृति है। कोको सम्मेलनों का उपयोग करने का उद्देश्य-सी उत्पादन करता है - (उम्मीद है) स्वयं दस्तावेज, यद्यपि, वर्बोज़ कोड। अपना उदाहरण देखकर, मुझे आपके इरादे को निर्धारित करने में कोई समस्या नहीं है।

अब, यदि आप इसे सुंदर बनाना चाहते हैं, तो आप इसे मैक्रो में encapsulate कर सकते हैं ताकि यह एक लाइन के लिए संघनित हो। हालांकि यह देखने के लिए सुंदर हो सकता है, यह निश्चित रूप से जानवर को बनाए रखने में अनावश्यक जटिलता जोड़ देगा। अंतिम उपयोगकर्ता इस बात पर ध्यान नहीं दे रहा है कि कोड कितना सुंदर है - जब तक कि यह नई सुविधाओं को जोड़ने से रोकता है।

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

मेरी सलाह, उन्हें समय दें। कुछ महीनों में यदि आप उन्हें अपने वर्कफ़्लो को बाधित करते हैं, तो हर तरह से, अलग-अलग निब्स पर वापस जाएं। वे कहीं नहीं जा रहे हैं। कम से कम कुछ समय के लिये।

बस मेरे दो सेंट। सौभाग्य!

+1

मैं उत्पाद के बारे में सहमत हूं, अंतिम उपयोगकर्ता के लिए महत्वपूर्ण है, लेकिन एक अभियंता के रूप में मुझे केवल अंतिम उत्पाद की तुलना में बहुत अधिक चीजों की चिंता करनी है। स्टोरीबोर्ड के साथ संस्करण नियंत्रण फ़ाइल विवादों के लिए – Ecarrion

5

मैं मानता हूँ कि एक बदसूरत कोड है और मेरी दृष्टि सम करने के लिए मैं एक मैक्रो बनाने:

#define WhenSegueIdentifierDo(segueIdentifier, block) if([segue.identifier isEqualToString:segueIdentifier]) block(); 

और मेरे prepareForSegue में:

WhenSegueIdentifierDo(kModalVC1ToVC2,^
{ 
    //code 
}); 

WhenSegueIdentifierDo(kModalVC1ToVC3,^
{ 
    //code 
}); 

मैं भी हार्डकोडेड तार के बजाय स्थिरांक का उपयोग (हालांकि मैं इसे स्टोरीबोर्ड पर उपयोग नहीं कर सकता) इसे और अधिक सुंदर रखने के लिए। संक्रमण + मूल दृश्य नियंत्रक नाम की कश्मीर + प्रकार + गंतव्य को देखने के लिए + नियंत्रक नाम: मैं भी एक सम्मेलन का उपयोग करें।

तुम भी

navigationController.topViewController 

[navigationController viewControllers][0]; 

बस मेरे 2 सेंट की बजाय इस्तेमाल कर सकते हैं ...

+0

पर यह फिर से ढूंढने के लिए कि ब्लॉक दृष्टिकोण वास्तव में बहुत साफ है, लेकिन मैंने अभी निब्स/xibs के साथ चिपकने का फैसला किया है। मुझे अपने सभी विचारों को एक फ़ाइल में रखने का विचार पसंद नहीं है। यह बहुत ही अस्पष्ट बड़ी टीम है! – Ecarrion

+0

सुंदर ठंडा मैक्रो! – jere