我正在使用 Xcode 创建一个 iOS 应用程序。我也在使用 SQL 服务器(xampp)。总体来说效果很好。但我在以下几点有问题:
- 我有一个带有表视图的视图控制器,我正在使用 SQL 查询的结果填充这个表(想象 taglist 是一个包含 12 行的数组)
- (void)viewDidLoad
[[API sharedInstance] commandWithParams:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"listtags", @"command", nil] onCompletion:^(NSDictionary *json) {
NSArray* result = [[NSArray alloc] initWithArray:[json objectForKey:@"result"]];
taglist =[[NSMutableArray alloc] initWithArray:result];
[taglist removeAllObjects];
for(NSDictionary* i in result){
[taglist addObject:[i objectForKey:@"tag"]];
}
NSLog(@"sql %u",taglist.count);
}];
NSLog(@"did load %u",taglist.count);
}
tableviews 有两种必需的方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSLog(@"table %u",taglist.count);
return taglist.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSLog(@"cell %u",taglist.count);
cell.textLabel.text = [taglist objectAtIndex:indexPath.row];
return cell;
}
问题是因为获取查询结果需要一段时间,所以我的表方法使用空的 taglist 数组来填充。NSLogs 的输出是这样的
2012-12-19 14:35:41.470 iReporter[33507:c07] did load 0
2012-12-19 14:35:41.473 iReporter[33507:c07] table 0
2012-12-19 14:35:41.476 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.479 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.481 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.483 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.484 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.486 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.487 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.489 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.493 iReporter[33507:c07] cell 0
2012-12-19 14:35:41.564 iReporter[33507:c07] sql 12
这意味着 taglist 数组在 viewDidload 、 numberofRows 和 cellForRow 函数之后是空的。但是当查询完成时,我可以获得正确的值。但是到那时我的表属性已经定义,所以它没有用,我的问题是,有没有办法等待该响应,并在确保它不为空之后使用它来创建表。谢谢