2012-03-22 20 views
5

यहाँ यहाँ मेरी पुनः लोड समारोहआईओएस UITableView reloadData केवल तालिका ताज़ा करता है दूसरी बार मैं अपने को फिर से लोड फ़ंक्शन को कॉल

- (void) reloadTable:(id)sender 
{ 
    NSLog(@"Reload Table"); 
    NSLog(@"%@",[appDelegate queryList]); 
    [self.driverTable reloadData]; 
    [self.driverTable setNeedsLayout]; 
    [self.driverTable setNeedsDisplay]; 
} 

वह जगह है जहाँ मैं इसे वेब सेवा से डेटा प्राप्त करने के बाद कहते हैं

if([elementName isEqualToString:@"Response"]) { 
    Response = NO; 
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil]; 
    [lookupView reloadTable:self]; 
} 

समस्या मैं एक खोज बटन दबाकर और डेटा प्राप्त करके एक खोज करने के बाद अभी ठीक है। तालिका नए डेटा के साथ ताज़ा नहीं है। यदि मैं फिर से बटन को दबाकर एक ही फ़ंक्शन को कॉल करता हूं तो तालिका फिर से लोड हो जाती है। अब मुझे पता है कि डेटा वहां है क्योंकि मैं टेबल रीलोड को कॉल करने से पहले सरणी को प्रिंट करता हूं।

कोई विचार क्यों?

+0

आपको सेटNeedsLayout और setNeedsDisplay की आवश्यकता क्यों है? UITableViews को redraw की आवश्यकता नहीं है, वे खुद को पुनः लोड समय पर संभालते हैं। – CodaFi

+0

ओह, मैं सिर्फ समाधान के लिए शोध कर रहा था, इसी तरह की समस्याओं वाले कुछ लोगों ने इसका उल्लेख किया था इसलिए मैं बस कोशिश कर रहा था –

+0

@ कोडाफ़ी द्वारा उल्लिखित उन चीजों को हटाएं। यह वहां नहीं है। –

उत्तर

6

मैंने एक ही समस्या में भाग लिया है। ऐप्पल के प्रलेखन के अनुसार, पुनः लोडडेटा "पंक्तियों को डालने या हटाने के तरीकों में नहीं बुलाया जाना चाहिए।" एक वर्कअराउंड जिसका मैंने उपयोग किया है, कॉल को पुनः लोड करने में देरी करना है ताकि यह तालिका अपडेट करने के तुरंत बाद नहीं हो। delayReloadData के निम्नलिखित कार्यान्वयन के साथ उपयुक्त जगह पर

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5]; 

कि
-(void)delayedReloadData{ 
    [self.tableView reloadData]; 
} 

एक नकारात्मक पक्ष को प्रभावित मैं इस दृष्टिकोण से देख लिया है है, तो तालिका पंक्ति दिखाई दे रहा है वहाँ में थोड़ा विलंब है: इस प्रयास करें इससे पहले कि यह अपनी सामग्री दिखाता है।

+0

द्वारा उल्लिखित लाइनों को हटा दिया, ऐसा लगता है कि यह मेरे लिए काम करता है धन्यवाद –

+0

[यह] (http://stackoverflow.com/questions/14018754/why-reloaddata-shouldnt-be-called-on-methods- यह -डिलीट-डालने वाली पंक्तियां) प्रश्न @ bobnoble के उत्तर – abbood

0

मुझे पता चला कि आप अपने if loop में elementName देखकर एक्सएमएल पार्सिंग कर रहे हैं। आपको अपने पार्सिंग कोड में load a NIB file क्यों चाहिए। इसका क्या उपयोग है? आप बस इस तरह अपनी reloadTable: विधि को कॉल कर सकते हैं।

[self reloadTable:self]; 

आप अपने app delegate फाइल में कुछ सरणी का उपयोग कर अपने tableView पॉप्युलेट कर रहे हैं। तो क्या आपने अपने प्रतिनिधि को अपने व्यू कंट्रोलर में शुरू किया था?

+0

पर अनुवर्ती के रूप में गिन सकते हैं हां आप सही हैं, मैं उस सरणी को पॉप्युलेट कर रहा हूं जिसमें ऐप प्रतिनिधि का उपयोग करके तालिका के लिए डेटा शामिल है। एक बार जब मुझे पता चले कि सारी जानकारी सरणी में लोड की गई है तो मैं तालिका के दृश्य नियंत्रक में रीफ्रेश टेबल फ़ंक्शन को कॉल करने के लिए ऐप प्रतिनिधि का उपयोग करता हूं। –

+0

गलत संदेश ... –