2012-12-08 27 views
0

我的UITableView單元中的數據來源是:目標C表格視圖單元格數據源之前繪製

- (void)connectionDidFinishLoading:(NSURLConnection *)conn { 

    // We are just checking to make sure we are getting the XML 
    NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSWindowsCP1252StringEncoding] autorelease]; 
    // NSLog(@"xmlCheck2 = %@", xmlCheck); 

    TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:xmlData]; 
    for (int i=2; i<33; i++) { 
     NSString *link=[NSString stringWithFormat:@"/html/body/table/tr[%d]/td",i]; 

     NSArray *elements = [xpathParser searchWithXPathQuery:link]; 

     NSString *date = [NSString stringWithFormat:@"%@, %@",[elements[5]text],[elements[1]text]]; 
     [times addObject:date]; 
     [names addObject:[elements[2]text]]; 
     [types addObject:[elements[3]text]]; 
     [places addObject:[elements[4]text]]; 

     NSLog(@"%@", elements); 
     NSLog(@"%@", [elements[0] text]); 
    } 
} 

但在此之前,即使在連接之前啓動的連接完成被稱爲繪製細胞的方法我繪製細胞。在繪製單元格之前,如何延遲繪製單元格方法或確保連接已完成?

+0

隱藏您的表格並在連接完成後顯示它。 – sunkehappy

+0

不保留創建單元格的方法不被調用,它只是使單元格不可見。 – user1883873

+0

你不能拖延。 – sunkehappy

回答

0

只有在完成加載數據後,才需要設置tableview的數據源&委託屬性。 如果您已經從IB或Storyboard設置了tableview的數據源代理&,請將其刪除。在完成加載數據後,設置tableview的代表&數據源屬性。並重新加載表格。

- (void)connectionDidFinishLoading:(NSURLConnection *)conn { 

    // We are just checking to make sure we are getting the XML 
    NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSWindowsCP1252StringEncoding] autorelease]; 
    // NSLog(@"xmlCheck2 = %@", xmlCheck); 

    TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:xmlData]; 
    for (int i=2; i<33; i++) { 
     NSString *link=[NSString stringWithFormat:@"/html/body/table/tr[%d]/td",i]; 

     NSArray *elements = [xpathParser searchWithXPathQuery:link]; 

     NSString *date = [NSString stringWithFormat:@"%@, %@",[elements[5]text],[elements[1]text]]; 
     [times addObject:date]; 
     [names addObject:[elements[2]text]]; 
     [types addObject:[elements[3]text]]; 
     [places addObject:[elements[4]text]]; 

     NSLog(@"%@", elements); 
     NSLog(@"%@", [elements[0] text]); 
    } 

    [tableView setDelegate:self];// set delegate, datasource & reload data. 
    [tableView setDatasource:self]; 
    [tableView reloadData]; 
} 
+0

這將工作,但通常不是你要走的路我會說... –

+0

,因爲實際的dataSource保持不變,只有源中的數據發生變化 –

0

這就是異步網絡的關鍵點:)您的主線程不會等待它完成! 同步是存在但不好的

您的用戶界面是否處理數據尚未提供的情況。

一)組的tableview隱藏,顯示紡車和表演,並重新加載時connectionDidFinish被稱爲

模擬代碼

-viewWillAppear { 
    table.hidden = YES; 
    spinningActivity.hidden = NO; 
    networkConnection start]; 
} 

-connectionDidFinish { 
    spinningActivity.hidden = YES; 
    [table reloadData]; 
    table.hidden = NO; 
} 
0

,提供的電池信息只叫,如果你告訴它的方法表有準備顯示的行。如果你在tableView:numberOfRowsInSection:中告訴它正確的話 - 如果連接沒有完成,可能爲0 - 不應該有任何不正確的呼叫tableView:cellForRowAtIndexPath:

相關問題