iphone - बंडल में एनआईबी लोड नहीं कर सका




ios4 titanium (18)

XCode 3x से XCode 4 में अपना पुराना कोड बदलने के दौरान यह समस्या मिली और इसे रूटव्यू कंट्रोलर.एक्सिब में wwwwwwww.xib का नाम बदलकर हल किया गया।

मैं एपसेलरेटर टाइटेनियम के साथ कस्टम मॉड्यूल के रूप में जेन्रेन एंजेज को एकीकृत करने की कोशिश कर रहा हूं। मैंने एक नमूना मॉड्यूल बनाया है और जेरेन्ज फ़ोल्डर को नमूना मॉड्यूल xcodeproj में खींच लिया है जैसा कि जैन्रेन के दस्तावेज़ीकरण में दर्शाया गया है।

अब मैं इस प्रोजेक्ट को बिल्ड कमांड देता हूं, फिर ./build.py निष्पादित करता ./build.py और अंत में मैं titanium run कमांड निष्पादित करता हूं। यह सिम्युलेटर में एक रिक्त स्क्रीन के साथ एप्लिकेशन लॉन्च करता है और तुरंत निम्न त्रुटि फेंकने दुर्घटनाग्रस्त हो जाता है।

असीमित अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएननल इंटरकेंसिस्टेंसी अपवाद', कारण: 'एनआईबी को बंडल में लोड नहीं किया जा सका:' एनएसबंडल </ उपयोगकर्ता / अभिलश / लाइब्रेरी / एप्लिकेशन सपोर्ट / आईफोन सिम्युलेटर / 4.2 / एप्लीकेशन / सीए 167346-4091-4E16-B841-955D1D391713 / test.app> (लोड किया गया) 'नाम' JRProvidersController ''

यह त्रुटि क्यों हो सकती है?


अगर इस मुद्दे को कुछ भी काम नहीं हुआ, तो मैंने व्युत्पन्न डेटा के साथ कुछ अजीब लगा।

Xcode 6.3.2 में मुझे यह करना था:

एक्सकोड मेनू में -> प्राथमिकताएं -> स्थान टैब -> स्थान में व्युत्पन्न डेटा को सापेक्ष में बदलें और फिर डिफ़ॉल्ट पर वापस टॉगल करें

फिर निब ठीक लोड हो गया।


एक्सकोड 4.6.3 पर काम करना और मेरी एनआईबी फाइलों को स्थानांतरित करना मैं इस मुद्दे में भी भाग लेता हूं।

मेरे लिए फाइल इंस्पेक्टर में 6.1 के बजाय 5.0 परिनियोजन 5.0 में "दस्तावेज़ संस्करण" को बदलने के अलावा कुछ और मदद नहीं मिली।


एक्सकोड 6.3 का उपयोग करके मुझे बस एक दिलचस्प अनुभव था।

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

अंत में, ब्रायन माइकल बेंटले के जवाब के बाद, मैंने अंततः अपने एचडी पर अपने सिम्युलेटर के फ़ोल्डर में मेरी .app फ़ाइल का निरीक्षण करने का निर्णय लिया। मैंने पाया कि मेरे सभी निब्स वहां थे लेकिन अपेक्षित abc.nib के बजाय एक abc ~ ipad.nib के साथ। मैंने मैन्युअल रूप से ~ ipad भाग को निकालने के लिए इन सभी फ़ाइलों का नाम बदल दिया, बनाया और यह काम किया!

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

मैंने सिम्युलेटर से ऐप हटा दिया और एक ही चीज़ फिर से की - फिर से केवल आईपैड समर्थित है। इस बार, .app में प्रत्येक अपेक्षित स्टोरीबोर्ड के लिए abc ~ iphone.nib और abc ~ ipad.nib शामिल था और यह आईफोन सिम्युलेटर पर ठीक था। दोबारा - अगर हम केवल हमारी परिनियोजन जानकारी सेटिंग में आईपैड चुनते हैं, तो इसे आईफोन सिम्युलेटर पर नहीं चलना चाहिए। यह एक एक्सकोड बग है।

तो, एक्सकोड के हिस्से पर यहां कुछ असंगत व्यवहार है और दुर्भाग्यवश यह एक अजीब बग है और इसे पुन: पेश करना मुश्किल हो सकता है, लेकिन मैंने इसे यहां रखा ताकि भविष्य में दूसरों की मदद कर सके।


ऑब्जेक्टिव-सी व्यू कंट्रोलर में एक कस्टम स्विफ्ट व्यू का उपयोग करना (हाँ, <<PROJECT NAME>>-Swift.h फ़ाइल आयात करने के बाद भी), मैंने इसका उपयोग करके निब लोड करने का प्रयास किया था:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... लेकिन NSStringFromClass([MyCustomView class]) लौटाता है <<PROJECT NAME>>.MyCustomView और लोड विफल रहता है। टीएल; डीआर सभी ने स्ट्रिंग अक्षर का उपयोग करके अच्छी तरह से निब लोड किया:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

जब आप XIB नाम में शामिल होते हैं तो .xib मत डालें! यह पहले ही लागू है!

ऐसा मत करो:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

यह करो:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];

त्रुटि का अर्थ है कि "JRProvidersController" नाम के साथ कोई .xib फ़ाइल नहीं है। JRProvidersController.xib जांच करें कि क्या JRProvidersController.xib मौजूद है।

आप .xib file को लोड करेंगे

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

परियोजना पर देखो

Target -> Buid Phases -> Copy Bundle Resources

आपको लाल रंग के साथ आपका xib / storyborad मिल जाएगा।

बस इसे हटा दें। परियोजना से गायब फ़ाइल के सभी संदर्भों को भी हटा दें।

अब इस स्टोरीबोर्ड / xib फ़ाइल को इस Copy Bundle Resources खींचें। यह आपको अभी भी लाल रंग के साथ फ़ाइल दिखाएगा लेकिन इसके बारे में चिंता न करें।

बस स्वच्छ और परियोजना का निर्माण।

अब आप अपनी परियोजना को फिर से सफलतापूर्वक चलाएंगे !!


बिल्ड लक्ष्य मेरे आईओएस उपकरणों में से एक होने के साथ, मैंने उत्पाद फ़ाइल (xyzw.app) पर राइट-क्लिक किया और फाइंडर आइटम में शो का चयन किया। यह xyzw.app के अंदर एक खिड़की खोला; मैंने शो पैकेज सामग्री का उपयोग करके बंडल खोला और मैंने देखा कि सभी फाइलें देखी गईं, एक फ़ाइल को छोड़कर, जिस पर यह शिकायत कर रहा था, नाम के निचले मामले के बजाय पूंजी I के साथ (zoomieView.nib के बजाय zoomieVIew.nib )। मैंने xib के फ़ाइल नाम में अपरकेस I को देखा था, और इसे बदल दिया और पुनर्निर्मित किया; स्पष्ट रूप से एक्सकोड ने जेनरेट किया .nib नाम जिस तरह से था। मैंने बंडल में पुनर्निर्मित zoomieVIew.nib को हटा दिया, पुनर्निर्मित किया, और एक्सकोड ने फ़ाइल को zoomieView.nib के रूप में विधिवत पुनर्निर्मित किया। ऐप ने डिवाइस पर काम करना शुरू कर दिया।


मुझे एक ही समस्या थी (अपवाद 'बंडल में एनआईबी लोड नहीं कर सका: ..') मेरे एक्सकोड को 3.2 से 4.02 तक अपग्रेड करने के बाद। जबकि एक्सकोड 3.2 के साथ मेरे ऐप को तैनात करने से ठीक है, यह ऊपर वर्णित अपवाद को बढ़ाने के लिए एक्सकोड 4 के साथ दुर्घटनाग्रस्त हो गया - लेकिन केवल जब मैंने आईओएस सिम्युलेटर (v.4.2) पर तैनाती करने की कोशिश की। आईओएस डिवाइस को लक्षित करना (v.4.1) ने एक्सकोड 4 के साथ भी अभिनय किया।

यह निकला (घंटों के आस-पास घबराहट के घंटों के बाद) कि कारण .xib-file में लगभग "छिपी हुई" सेटिंग थी:

फ़ाइल इंस्पेक्टर में .xib फ़ाइलों के गुणों पर जाएं: संपत्ति 'स्थान' को सभी .xib फ़ाइलों के लिए 'समूह से संबंधित' पर सेट किया गया था। मैंने इसे 'प्रोजेक्ट से संबंधित' और वॉयला में बदल दिया: सभी .xib फ़ाइलें अब आईओएस सिम्युलेटर में सही ढंग से लोड की गई हैं!

मुझे कोई संकेत नहीं है कि इस अजीब Xcode4 व्यवहार के लिए इसका क्या कारण है लेकिन शायद यह प्रयास करने लायक है?


मुझे एक ही समस्या मिली है और मेरी .xib फ़ाइल पहले ही परियोजना के साथ Target Membership में जुड़ी हुई है। फिर मैंने फ़ाइल के लक्ष्य चेकबॉक्स को अनचेक किया और फिर से जांच की, फिर परियोजना को Clean और Build । दिलचस्प बात यह है कि यह मेरे लिए काम किया है।


मुझे स्टोरीबोर्ड के साथ यह समस्या थी और निब को 'बीकेडी-जे 3-एफएचआर-व्यू-जेडआरआर -8 एम -2 डी' जैसे कुछ कहा जाता था।

ऐसा इसलिए था क्योंकि मैं एक व्यू कंट्रोलर के init (कोडर के साथ) में self.view में एक सबव्यूव जोड़ने की कोशिश कर रहा था। Self.view अभी तक मौजूद नहीं है।

इसे देखने के लिए इसे हटाया गया और सभी बेहतर!


मैं एक समस्या मे फंस गया। मेरे मामले में निब नाम "MyViewController.xib" था और मैंने इसे "MyView.xib" में बदल दिया। यह त्रुटि से छुटकारा पा लिया।

मैं एक्सकोड 3 से 4.2 तक एक परियोजना भी चला रहा था। पथ प्रकार बदलना कोई फर्क नहीं पड़ता।


मैंने देखा कि यदि आप गिट में शाखाओं के बीच स्विच करते हैं और साफ करना भूल जाते हैं तो ऐसा हो सकता है। तो xib वहाँ है और सब कुछ मिल रहा है, लेकिन सटीक निर्माण में समस्या हो सकती है। तो बस एक साफ करने के लिए मत भूलना


यदि आप अपनी परियोजना में ढांचे का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करना होगा कि आप सही बंडल से लोड हो रहे हैं:

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];

यह मेरे लिए काम किया गया है .. सुनिश्चित करें कि आपने सही नाम टाइप किया है।

[[एनएसबंडल मेनबंडल] loadNibNamed: @ "ग्राफव्यू" मालिक: स्वयं विकल्प: शून्य];

ग्राफव्यू (निब नाम)


सभी को खोजने का प्रयास करें

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

अपने कोड में, और सुनिश्चित करें कि XXXController सही वर्तनी में हैं


हर बार जब मैं एक व्यू कंट्रोलर का नाम दोबारा करता हूं जो मेरे ऐप में है, तो मैं इस पर समय बर्बाद करता हूं। रिफैक्टरिंग initWithNibName में nib नाम नहीं बदलती है: @ "MYOldViewControllerName"।