2011-12-21 6 views
5

मेरे पास एक ऐसी स्थिति है जहां मेरी तालिका मेरे webservice से डेटा प्राप्त करने से पहले लोड हो रही है।UITableView कनेक्शन से डेटा प्राप्त करने से पहले दिखाई दे रहा हैडिफफिनिश लोडिंग

जब मैं इसे डीबग करता हूं, तो मैं देख सकता हूं कि मेरे NSMutableArray में 123 ऑब्जेक्ट हैं, लेकिन यह तालिका में दिखाई नहीं दे रहा है।

यह मेरा connectionDidFinishLoading विधि है:

-(void)connectionDidFinishLoading:(NSURLConnection *)conn{ 
myData = [[NSString alloc] initWithData:xData encoding:NSUTF8StringEncoding]; 
SBJsonParser *jParser = [SBJsonParser new]; 
NSError *error = nil; 
NSArray *jsonObjects = [jParser objectWithString:myData error:&error]; 
NSMutableArray *books = [[NSMutableArray alloc] init]; 

for(NSDictionary *dict in jsonObjects) 
{ 
    Book *b = [Book new]; 
    b.bookName =[dict objectForKey:@"name"]; 
    b.published = [dict objectForKey:@"published"]; 
    [books addObject:b]; 

} 
self.bookArray = books; 
[self.tableView reloadData]; 
NSLog(@"myData = %@",myData); 
} 

अगर मैं अपने jsonObjects इस मैं हो रही है और मेरे संग्रह को आबाद करने डिबग। लेकिन मुझे लगता है कि मेरी मेज अभी भी खाली है।

बस स्पष्ट करने के लिए यह मेरा tableView विधि है:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
... 
Book *b = (Book *)[self.bookArray objectAtIndex:[indexPath row]]; 
cell.textLabel.text = b.bookName; 
.... 

किसी को भी मैं क्या याद कर रहा हूँ के साथ मेरी मदद कर सकते हैं?

+0

चलो संपूर्ण सेलफॉररो विधि देखें। क्या आपने पंक्तियों को लागू किया है? – Dancreek

+0

@ डांस्क्री मुझे लगता है कि आप नंबरऑफ्रोफोरसेक्शन का मतलब है? वैसे भी, जब मैं विषय पढ़ता हूं तो वह और [tableview reloadData] मेरा संदेह था। हालांकि वह रीलोडडाटा को कॉल कर रहा है, जो बाद वाले को समाप्त करता है। – barley

+0

- (एनएसआईएनटेगर) तालिका दृश्य: (यूआईटीबल व्यू *) तालिका दृश्य संख्याऑफ्रोइन्सइनसेक्शन: (एनएसआईएनटेगर) सेक्शन { वापसी पुस्तकअरेरेउंट; } – Matt

उत्तर

1

कॉलिंग थ्रेड की जांच करें। आपके पास मुख्य थ्रेड के अलावा किसी अन्य चीज़ पर UIKit अपडेट नहीं हो सकते हैं। मुझे लगता है कि आपका कनेक्शनडिफिनिश लोडिंग: एक अलग धागे पर बुलाया गया और यह मुद्दा यहां है।

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableView reloadData]; 
}); 
1

आप इस मामले में जहां दिखाने के लिए और मामले को दिखाने के लिए डेटा है जब वहाँ के लिए करने के लिए कोई डेटा नहीं है के लिए विचार करने के लिए क्या numberOfRowsInSection (और numberOfSections) द्वारा दिया जाता है की जरूरत है की कोशिश करो। प्रत्येक बार जब आप reloadData को कॉल करते हैं, तो तालिका दृश्य डेटा स्रोत के बारे में नवीनतम जानकारी प्राप्त करने के लिए इन दो विधियों को कॉल करेगा। यदि आपका डेटा लोड नहीं हुआ है, तो इन प्रतिनिधि विधियों को उचित मूल्यों की रिपोर्ट करनी चाहिए। यदि डेटा लोड नहीं होता है, तो आप शून्य मान के लिए परीक्षण कर सकते हैं या कुछ समान परीक्षण कर सकते हैं, और उसके बाद उपयुक्त मान वापस कर सकते हैं। एक बार डेटा लोड होने के बाद, प्रतिनिधि विधियों को डेटा स्रोत में सामग्री के आकार के आधार पर मान वापस करना चाहिए।

यदि आप हमें इन तरीकों के लिए अपना कोड दिखाते हैं, तो कोई टिप्पणी कर सकता है कि यह आपकी समस्या है या नहीं।

+0

अपने दूसरे प्रश्न पर, यदि आप जानते हैं कि सामग्री खाली है तो आप तालिका के 'छिपा' प्रोपरी सेट कर सकते हैं। आप इसे उल्लिखित विधियों में से एक के अंदर कर सकते हैं। दिखाने के लिए सामग्री होने पर इसे छिपाना याद रखें (छुपा = नहीं)। – Jim

+0

- (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { // वर्गों की संख्या लौटें। वापसी 1; } - (एनएसआईएनटेगर) तालिका दृश्य: (यूआईटीबल व्यू *) तालिका दृश्य संख्याऑफ्रोइन्स जांच: (एनएसआईएनटेगर) सेक्शन { वापसी पुस्तकअरेरेउंट; } मेरे पास इन तरीकों में बहुत कुछ नहीं है। – Matt

+0

मैं बस अपना कार्यक्रम डिबग, और यह numberOfRowsInSection 1 समय से पहले मेरी सरणी डेटा के साथ से भर जाता है कहता है, और इसे फिर से कभी नहीं कहा जाता है। – Matt

1

ऐसा इसलिए है क्योंकि ऐसा करने का तरीका है, सामग्री को तब तक लोड न करें जब तक सामग्री वेबसाइसेस के माध्यम से डाउनलोड न हो जाए।

इसके लिए प्रतिनिधि आईबी के माध्यम से सेट नहीं करते हैं। इस वेब अनुरोध के पूरा होने के बाद प्रतिनिधि और डाटासोर्स को कोड के माध्यम से सेट करें और फिर reloadData विधि पर कॉल करें। हम वेबकॉल संसाधित होने तक तालिका को लोड करने के लिए प्रतीक्षा कर सकते हैं। कस्टम एचयूडी के कुछ साफ गतिविधि संकेतक को डेटा लोड होने के दौरान प्रदान करें और वह नौकरी करें

+1

जबकि प्रतिनिधि स्थापना –

+0

downvoting कृपया टिप्पणी जोड़ने बस ठीक है। डेटा स्रोत विधियों में, यदि डाउनलोड पूरा हो गया है तो उसे ध्यान में रखना चाहिए। –

+0

"अगर डाउनलोड पूरा हो गया है तो उसे ध्यान में रखना चाहिए।" माध्यम? –