2016-03-11 3 views
6

मैंने इसे आधा दिन खो दिया और मुझे ऑनलाइन सीधे समाधान नहीं मिल रहा है।फ्रेमवर्क प्रोजेक्ट के अंदर .xib फ़ाइल कहां डालें?

मैंने आईओएस कोको टच फ्रेमवर्क बनाया है। मेरे पास कुछ निजी और सार्वजनिक कक्षाएं हैं और यह सब ठीक काम करता है। समस्या जब मैं उस ढांचे अंदर .xib फ़ाइल जोड़ने है।

मेरी ढांचे के अंदर मैं .xib फ़ाइल और त्रुटि मैं हो रही है का दृष्टांत चाहते हैं:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/dino/Library/Developer/CoreSimulator/Devices/FEDECDC2-D4EA-441E-B53B-329A5B3DFB7A/data/Containers/Bundle/Application/78CEC01F-4C36-4143-A7D6-DDE6CCAC801B/MyApp.app> (loaded)' with name 'NUInAppMessageView'' 

मैंने सुना है कि .xib फ़ाइलों स्थिर पुस्तकालय के अंदर निहित नहीं किया जा सकता, लेकिन मुझे लगता है कि उन्हें होना चाहिए ढांचे के अंदर इस्तेमाल करने में सक्षम।

मेरे ढांचे के लक्ष्य में पहले से ही "कॉपी बंडल संसाधन" शामिल है और यह .xib फ़ाइल स्वचालित रूप से फ्रेमवर्क प्रोजेक्ट के अंदर बनाई गई थी।

enter image description here

मैं कुछ स्थानों है कि संसाधनों के लिए एक अलग में जोड़ा जाना चाहिए पर पढ़ा है। बंडल लक्ष्य लेकिन नए लक्ष्य बनाते समय कोई "बंडल" विकल्प नहीं है और मेरा मानना ​​है कि यह पुराना स्थैतिक-पुस्तकालय-दिवस है।

NSBundle * frameworkBundle = [NSBundle bundleForClass:[self class]]; // fine (not nil) 

NUInAppMessageView *view = [[frameworkBundle loadNibNamed:@"NUInAppMessageView" owner:self options:nil] firstObject]; // <-- CRASH 

मैं एक अधिक विधि कॉल में इस तोड़ने की कोशिश की और लगा कि नोक ही बनाया जा रहा है:

इस कोड को मैं (ढांचे के अंदर) मेरे विचार प्रारंभ करने में उपयोग कर रहा हूँ है

UINib *nib = [UINib nibWithNibName:@"NUInAppMessageView" 
           bundle:frameworkBundle]; // fine (not nil) 
NSArray *objects = [nib instantiateWithOwner:self options:nil]; // <-- CRASH 

मेरे पास अब विचार नहीं हैं। मैंने प्रोजेक्ट क्लीन के साथ प्रयास किया, व्युत्पन्न डेटा हटाया लेकिन वे नौकरी नहीं कर रहे हैं।

क्या मुझे यहां कुछ याद आ रही है?

+0

मुझे नहीं पता कि आप क्या गलत कर रहे हैं इसलिए मैंने एक उदाहरण प्रोजेक्ट बनाया जिसे आप डाउनलोड और जांच सकते हैं। यह स्विफ्ट में लिखा गया है लेकिन इसे बहुत अंतर नहीं करना चाहिए, esp। क्योंकि बहुत कम कोड है। :) https://github.com/mattneub/FrameworkWithNib – matt

+0

आपके कोड और खान के बीच एकमात्र स्पष्ट अंतर यह है कि मैंने उस कोड को मुख्य कोड के भीतर से लोड किया, फ्रेमवर्क कोड के भीतर से नहीं, लेकिन यह केवल एक दुर्घटना थी; इससे कोई फ़र्क नहीं पड़ता। मैं बस इसे फिर से लिखता हूं ताकि मैं ढांचे को फ्रेमवर्क कोड के भीतर से लोड कर सकूं और यह भी ठीक काम करता है। – matt

+0

@matt मैं सब कुछ हटाने और ताजा .xib बनाने जा रहा हूँ। यह हो सकता है कि Xcode कैश्ड सेटिंग्स के साथ कहीं गड़बड़ हो। धन्यवाद। – vale4674

उत्तर

5

आईओएस परियोजना में एक फ्रेमवर्क के भीतर निब फ़ाइलों को कहां रखा जाए?

मेरे जवाब देने के लिए पृष्ठभूमि:
मैं कुछ UITableView संबंधित कार्यान्वयन निर्यात करने के लिए कोशिश कर रहा था और यह के साथ पैक किया UITableViewCell.xib फ़ाइलों था। और वे अंत में .nib फाइलों में बदल जाते हैं! ;-) और मैं उन नोक फ़ाइलों के लिए बात कर रहे थे इस प्रकार है:

[[NSBundle mainBundle] loadNibNamed:customCellID owner:nil options:nil]; 

स्पष्टीकरण:
लेकिन यहाँ बात मैं गलत है किया है, मैं एक स्थिर कोको टच रूपरेखा का निर्माण और भीतर इसका इस्तेमाल करने की कोशिश एक और आवेदन तो रन टाइम पर MainBundle क्या होगा? निश्चित रूप से मेरे UITableView कार्यान्वयन को ऐप के मुख्य बंडल में कस्टमसेलिड के लिए Nib फ़ाइल को खोजने का प्रयास करने का प्रयास कर रहा है।

उत्तर:
तो मैं अपने UITableView कार्यान्वयन के ऊपर कोड स्निपेट बदल इस प्रकार है:

NSString *frameworkBundleId = @"com.randika.MyFrameworkBundleIDHere"; 
    NSBundle *resourcesBundle = [NSBundle bundleWithIdentifier:frameworkBundleId]; 

    customCell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:customCellID]; 
    if (customCell == nil) { 
     NSArray *nibs = [resourcesBundle loadNibNamed:emptyCellID owner:nil options:nil]; 
     customCell = [nibs objectAtIndex:0]; 
    } 

और ढांचे मैं अपने UITableView कार्यान्वयन से बाहर बनाया उपरोक्त त्रुटि फिर कभी नहीं दिया! :-)

आशा है कि यह उत्तर किसी के लिए सहायक हो सकता है!

चीयर्स! :-)

+0

धन्यवाद, यह हमारे लिए काम करता है – meronix

+2

आपको फ्रेमवर्क BundleId कहां से मिला? – gangelo

संबंधित मुद्दे