Ios 目标c表格视图数据源之前绘制的单元格

Ios 目标c表格视图数据源之前绘制的单元格,ios,uitableview,nsurlconnection,Ios,Uitableview,Nsurlconnection,my UITableview单元格的数据源位于: - (void)connectionDidFinishLoading:(NSURLConnection *)conn { // We are just checking to make sure we are getting the XML NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSWindowsCP1252StringEnc

my UITableview单元格的数据源位于:

- (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]);
    }
}
-(无效)连接IDFinishLoading:(NSURLConnection*)连接{
//我们只是检查以确保我们得到了XML
NSString*xmlCheck=[[NSString alloc]initWithData:xmlData编码:NSWindowsCP1252StringEncoding]autorelease];
//NSLog(@“xmlCheck2=%@”,xmlCheck);
TFHpple*xpathParser=[[TFHpple alloc]initWithHTMLData:xmlData];

对于(int i=2;i,只有在完成数据加载后,才需要设置tableview的datasource&delegate属性。 如果您已从IB或故事板中设置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];
}
-(无效)连接IDFinishLoading:(NSURLConnection*)连接{
//我们只是检查以确保我们得到了XML
NSString*xmlCheck=[[NSString alloc]initWithData:xmlData编码:NSWindowsCP1252StringEncoding]autorelease];
//NSLog(@“xmlCheck2=%@”,xmlCheck);
TFHpple*xpathParser=[[TFHpple alloc]initWithHTMLData:xmlData];

对于(inti=2;i这就是异步网络的要点:)您的主线程不会等待它完成!同步存在,但它不好

让您的UI处理数据尚不可用的情况

a) 将tableview设置为隐藏,显示旋转的轮子,并在调用ConnectiondFinish时显示和重新加载表格

模拟代码

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

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

提供单元格信息的方法只有在您告诉它有行可以显示时才被调用。如果您在
表格视图:numberOfRowsInSection:
中告诉它正确的事情——如果连接尚未完成,则可能是0——不应该有任何对
表格视图:cellForRowAtIndexPath:
的错误调用可以在连接完成后显示它。这并不能阻止调用创建单元格的方法,它只是使单元格不可见。这是NSURLConnection委托方法。您不能说何时完成。最好在调用此方法之前显示加载视图,然后在视图中添加tableview。否则,您可以调用[tableView reloaddata];在此方法中,重新加载tableView的单元格。由于实际数据源保持不变,因此只有源中的数据发生更改