Ios 目标c表格视图数据源之前绘制的单元格
my UITableview单元格的数据源位于: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
- (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的单元格。由于实际数据源保持不变,因此只有源中的数据发生更改