2011-05-31 20 views
5

मेरे ऐप में मैं एक व्यू कंट्रोलर (एक UITableViewController) दबा रहा हूं जिसमें UITableViewCell का संदर्भ देने वाली एक संपत्ति/आउटलेट भी है।UIViewController init बनाम initWithNibName: बंडल:

PreferencesController *pController = [[PreferencesController alloc] init];

xib फ़ाइल में UITableViewCell के लिए वस्तु का निर्माण नहीं करता है, इस प्रकार के आउटलेट है अशक्त, इस प्रकार तालिका लोड हो रहा है एक अपवाद उत्पन्न करता है: यह साथ नियंत्रक बनाने कि प्रतीत होता है। मैं के साथ इस हल:

PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil];

लेकिन मैं वास्तव में नहीं मिला कारण है कि यह काम किया, के रूप में दस्तावेज़ से ऐसा लगता है कि init संबंधित निब फ़ाइल (PreferencesController.xib) लोड करने के लिए पर्याप्त होना चाहिए।

उत्तर

4

PreferencesController नाम के बारे में कुछ जादुई प्रतीत होता है। मुझे बस एक ही समस्या थी। मेरी कक्षा (और xib) को किसी अन्य चीज़ का नाम बदलने से समस्या हल हो गई।

3

संपादित करें: मैं गलत था, nib फ़ाइलों को alloc init के साथ स्वचालित रूप से लोड होना चाहिए यदि उन्हें नियंत्रक के समान नाम दिया गया हो।

इंटरफ़ेस बिल्डर में आपकी फ़ाइल का स्वामी क्या है? इस मान को बदलकर डिफ़ॉल्ट व्यवहार को संशोधित किया जा सकता है।

+0

PreferencesController.xib के लिए फ़ाइल के मालिक वर्ग PreferencesController है और LibraryMenuController.xib LibraryMenuController ..
है के लिए मुद्दा यह है कि फ़ाइल के मालिक में दृश्य संपत्ति से जुड़े हुए नहीं xib में वस्तुओं init विधि के साथ लोड नहीं किए जाते है, लेकिन initWithNibName की आवश्यकता है .. – Fr4ncis

1

init के बजाय आपको initWithNibName:bundle: ओवरराइड करना होगा क्योंकि यह "नामित प्रारंभकर्ता" है। जब आप इसे निब फ़ाइल से लोड करते हैं, तो यह निर्माता संदेश कहलाता है।

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 

संसाधन

+0

डाउनवोट क्यों? –

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