2010-04-27 14 views
9

अद्यतन नहीं है मूल प्रश्न क्षमा करें, लेकिन यह मुझे थोड़ी देर के लिए बग करता है।UILabel

मैं एक विवरण एक uitable से देख सकते हैं और गतिशील रूप से अपने लेबल सेट करने का प्रयास बनाने के लिए, लेकिन वे अद्यतन करने नहीं हैं:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 

    myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil]; 

    [tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText" 
    NSLog(@"%@", tmpVC.myLabel);    // NSLog SHOWS NULL 

    [self.navigationController pushViewController:tmpVC animated:YES]; 
    [tmpObj release]; 
} 

इंटरफ़ेस बिल्डर में कनेक्शन स्थापित कर रहे हैं। फ़ाइल स्वामी के लिए कनेक्शन टैब दिखाता है

'myLabel' - 'Label (myLabel)' 

कोई विचार क्यों मूल्य नहीं आ रहा है?

कुछ और टिप्पणियों:

  • मैं भी एक IBAction कनेक्ट किया है। जब मैं कनेक्ट बटन पर क्लिक करता हूं तो यह विधि ठीक से कॉल की जाती है।
  • मुझे अपने एनएसएलओजी-स्टेटमेंट में कुछ पॉइंटर्स मिल गए हैं, चाहे बेहतर tmpVC.myLabel.text, का उपयोग न करें, लेकिन यह भी प्रयास करने की कोशिश कर रहा है।
  • myLabel को इंटरफ़ेस में आईबीओलेट UILabel * myLabel के रूप में घोषित किया गया है। संपत्ति को nonatomic, के रूप में परिभाषित किया गया है।

प्रकाश है:

थोड़ा के लिए इसके साथ चारों ओर खेलने के बाद अधिक मैं लेबल अद्यतित ऊपर pushViewController बयान ले जाया गया। इसने लेबल अपडेट को हल किया।

कार्य कोड इस तरह दिखता है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 

myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil]; 

[self.navigationController pushViewController:tmpVC animated:YES]; 

[tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText" 
NSLog(@"%@", tmpVC.myLabel);    // NSLog SHOWS NULL 

[tmpObj release]; 
} 

लेकिन मुझे समझ नहीं आता क्यों मैं अपने ViewController पुश करने के लिए की जरूरत है ???

+0

आप अन्य अपने कोड में कहीं भी इसे जारी करते dealloc से? – Codezy

उत्तर

14

ऐसा इसलिए है क्योंकि नियंत्रक का दृश्य केवल तभी बनाया जाता है जब एक्सेस किया जाता है। नियंत्रक को धक्का देना दृश्य को एक्सेस करता है।

वैकल्पिक रूप से, अगर आप दृश्य संपत्ति का उपयोग करने की एक पंक्ति जोड़ें, यह भी काम करेगा:

myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil]; 
    tmpVC.view; // Force view creation 
    [tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText" 
    NSLog(@"%@", tmpVC.myLabel);    // NSLog will display "myText" 
    [self.navigationController pushViewController:tmpVC animated:YES]; 
+0

धन्यवाद यार, सही समझ में आता है! भ्रम – iFloh

+0

चला गया मैंने पहले ही सोचा था कि मैं पूरी तरह से गूंगा था। –

+0

धन्यवाद @ ह्वे-बून-यार बीटीडब्ल्यू, tmpVC.view ने एक चेतावनी लौटा दी, [tmpVC view] मेरे लिए 100% काम करता है;) – DeZigny

2

यदि tmpVC.myLabel शून्य है, तो शायद यह इंगित करता है कि आपने UILabel से इंटरफेस बिल्डर में अपने myLabel इंस्टेंस वैरिएबल में आवश्यक कनेक्शन नहीं बनाया है।

+0

कनेक्शन मौजूद है: फ़ाइल स्वामी आउटलेट 'मेरा लेबल' - 'लेबल (myLabel)' दिखाता है। – iFloh

1

ऐसा इसलिए नहीं है क्योंकि आपका NSLog वास्तविक लेबल ऑब्जेक्ट को प्रिंट करने का प्रयास कर रहा है। आपके द्वारा जोड़ी गई जानकारी के जवाब में

NSLog(@"%@", tmpVC.myLabel.text); 

नहीं करना चाहिए था: अपने अन्य मुद्दा है कि आप अपने लेबल के लिए एक NSString लिंक कर लिया है प्रदर्शित होगी। आपको इसे UILabel से लिंक करना होगा। तो जहां आप अपना myLabel var घोषित करते हैं, इसे UILabel *myLabel पर बदलें, और किसी भी मिलान करने वाली संपत्ति के लिए यह वही है।

+0

हम्म, मुझे लगता है कि आप वहां हैं, लेकिन (ए) जब मैं ".text" जोड़ने की कोशिश करता हूं तो मुझे एक कंपाइलर त्रुटि "सदस्य 'myLabel' संरचना या संघ में नहीं मिलती है"
(बी) पूर्ववर्ती सेटटेक्स्ट कथन दृश्य में कोई भी अद्यतन नहीं उत्पन्न करता है।
शायद (ए) दृश्य को एनआईबी या नियंत्रक से ठीक से कनेक्ट नहीं किया जाता है, लेकिन यह नहीं देख सकता कि ब्रेक कहां बैठ सकता है .... – iFloh

+0

मेरे उत्तर में और अधिक जोड़ा गया, – Codezy

+0

हाय कोडेजी, क्षमा करें, एक टाइपो (उपरोक्त सही) था। आईबी ने मुझे एक मेलिंग क्लास को 2 डब्ल्यू/आउट करने की अनुमति नहीं दी। परिभाषा UILabel है ... – iFloh

1

क्या आपने myViewController.m में संपत्ति की थी? आप की तरह कुछ करने के लिए सक्षम होना चाहिए:

tmpVC.myLabel.text = tmpObj.myTitle;

+0

बदलना आवश्यक कोड अनुक्रम यह मेरे मामले में था। "@ सिंथेसाइज" भूल गए। धन्यवाद! – Bill

1

सुनिश्चित नहीं हैं लेकिन मुझे लगता है यह है क्या हो रहा है:

जब दृश्य धकेल दिया जाता है, नियंत्रक निब से लोड होगा और ऊपर हुक कार्य और दुकानों। इससे पहले, आउटलेट कनेक्ट नहीं होते हैं, इसलिए tmpVC.myLabel शून्य है।

यदि आप सुनिश्चित करना चाहते हैं, तो दृश्य देखने के लिए आप tmpVC के viewDidLoad में ब्रेकपॉइंट डाल सकते हैं।

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