2012-06-19 13 views
6

समस्याएआरसी के तहत मेरा आईबीओलेट जारी क्यों किया जा रहा है?

एक IBOutlet इससे पहले कि मैं इसका इस्तेमाल करने का मौका दिया जारी किया गया है।

मैं

क्या चाहते हैं मैं तो मैं एक तालिका दृश्य को फिर से लोड कर सकते हैं मेरे ऐप प्रतिनिधि से एक नेविगेशन नियंत्रक का उपयोग करना चाहते हैं।

मेरे सेटअप

मेरे पास है:

  • एक Main.xib कि मेरी मुख्य इंटरफेस के रूप में लक्ष्य सेटिंग में
  • एक IBOutlet नेविगेशन नियंत्रक के लिए एक इवर के रूप में मेरे एप्लिकेशन प्रतिनिधि पर सेट है
  • यह आईबीओलेटलेट मुख्य .xib
  • में सही नेविगेशन नियंत्रक तक लगा हुआ है, ऐप प्रतिनिधि को तत्काल में तत्काल ई xib नहीं बल्कि फ़ाइल के मालिक के रूप में स्थापित

मैं एआरसी, Xcode 4.3.2 और iOS5.1 उपयोग कर रहा हूँ

मैं क्या कोशिश की है

  • बदलने तैनाती लक्ष्य
  • नेविगेशन नियंत्रक, ऐप प्रतिनिधि के लिए डेलोक पर ब्रेक पॉइंट डालने - उन्हें कभी भी
  • एआरसी और आईबीऑटलेट्स पर जो कुछ भी मिल सकता है उसे पढ़ना - कुछ भी नहीं लगता है radict क्या मैं
  • आवश्यक सिर्फ एक न्यूनतम वर्गों के साथ एक ताजा प्रोजेक्ट बनाया जा कर रहा हूँ - मैं वास्तव में एक ही समस्या

कोड

KPAppDelegate.h

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> { 
    IBOutlet KPBrowseExpensesNavigationController *nc; 
} 

@property (strong) IBOutlet KPBrowseExpensesNavigationController *nc; 
देखना

KPAppDelegate.m

@implementation KPAppDelegate 

@synthesize nc; 

-(void)setNc:(KPBrowseExpensesNavigationController *)nc_ { 
    nc = nc_; // This gets called on view load and nc gets set. 
} 

...snip... 

// This is called about 5 seconds after app startup 
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { 
     // By the time we get here, nc is nil. 
     UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0]; 
     [[tvc tableView] reloadData]; 
} 

@end 

अद्यतन

मैं यहाँ वास्तव में कुछ मूर्ख कर रही होगी। यहां तक ​​कि एक अविश्वसनीय रूप से सरल परियोजना अभी भी इस समस्या को दिखाती है। नीचे लिंक देखें।

Download a simple test project that shows the problem.

+1

एक प्रश्न का बहुत अच्छा उदाहरण –

उत्तर

2

विंडो निब में, FilesOwner क्लास को UIAplplication के रूप में सेट करें और फिर आउटलेट से AppDelegate ऑब्जेक्ट में इसका प्रतिनिधि इंगित करें। यह आपके प्रोजेक्ट उदाहरण में गलत है।

+0

आप, महोदय, शानदार हैं। यह मेरे साथ हुआ, लेकिन प्रतिनिधि के निष्पादित होने लगते थे, इसलिए मैं सोचा कि यह मुद्दा नहीं होगा। मेरी इच्छा है कि मैंने 5 घंटे पहले यह कोशिश की थी ...! धन्यवाद। –

+0

कोई समस्या नहीं, यहां कोड की कुछ पंक्तियों की तुलना में इसे एक परियोजना पर समझना आसान है। तो आप एक परियोजना के उदाहरण के साथ समझाकर बहुत अच्छा किया :) –

1

मुझे यकीन है कि तुम क्यों यह एक संपत्ति & एक गैर संपत्ति के रूप में की घोषणा नहीं कर रहा हूँ।मैं इस तरह कुछ करना चाहिए:

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> 

@property (nonatomic, strong) IBOutlet KPBrowseExpensesNavigationController *nc; 

और अपने कार्यान्वयन में:

@implementation KPAppDelegate 

@synthesize nc = _nc; // So you don't accidentally use nc 

...snip... 

// This is called about 5 seconds after app startup 
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { 
     // By the time we get here, nc is nil. 
     UITableViewController *tvc = [[**self.nc** viewControllers] objectAtIndex:0]; 
     [[tvc tableView] reloadData]; 
} 

@end 

आशा इस मदद करता है!

+0

धन्यवाद, लेकिन यह अभी भी शून्य है। :(मैंने स्पष्ट रूप से गलत समझा है @property तो इसे साफ़ करने के लिए धन्यवाद। –

2

इंटरफ़ेस बिल्डर सेट से KPBrowseExpensesNavigationController प्रकार के रूप में आपका आउटलेट है? यदि नहीं, तो यह आपके निब और व्यू कंट्रोलर के बीच कनेक्शन बनाने वाला नहीं है।

आप पहचान इंस्पेक्टर

+0

Yup। यह हो गया। लेकिन सुझाव के लिए धन्यवाद। –

+0

और अभी भी काम नहीं कर रहा है? –

+0

अभी भी काम नहीं कर रहा है। आउटलेट/इवर अभी भी शून्य है। मेरे अपडेट को ऊपर देखें एक अल्ट्रा सरल प्रोजेक्ट जो समस्या को दिखाता है। –

1

में KPBrowseExpensesNavigationController के रूप में अपनी कस्टम वर्ग स्थापित करना चाहिए मैं नहीं देखा था जहाँ आप अपने नव नियंत्रक alloc। बस संपत्ति घोषित करने से कोई मूल्य आवंटित नहीं होगा, इसलिए यह शून्य होगा। ऐप प्रतिनिधि में -didFinishLaunchingWithOptions में, अपना आवंटन/init कथन सेट करें। बाकी सब कुछ ठीक दिखता है।

KPBrowseExpensesNavigationController *nc = [[KPBrowseExpensesNavigationController alloc] init]; 

आप एक कस्टम init है, तो आप वह भी उपयोग कर सकते हैं, लेकिन सिर्फ यह सेट अप करने के लिए इससे पहले कि आप कोशिश करते हैं और इसका इस्तेमाल सुनिश्चित करें।

+0

नियंत्रक को निब फ़ाइल में प्रारंभ किया गया था। लेकिन सुझाव के लिए धन्यवाद! –

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