1

我正在使用 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 函数之后是空的。但是当查询完成时,我可以获得正确的值。但是到那时我的表属性已经定义,所以它没有用,我的问题是,有没有办法等待该响应,并在确保它不为空之后使用它来创建表。谢谢

4

1 回答 1

1

从查询中获得结果并进行更新taglist后,调用[self.tableView reloadData].

于 2012-12-19T22:51:16.020 回答