在从connectionDidFinishLoading获取数据之前出现UITableView

Mat*_*att 5 uitableview ios xcode4.2

我有一个情况,我的表正在加载之前从我的webservice获取数据.

当我调试它时,我可以看到我NSMutableArray有123个对象,但它没有反映在表中.

这是我的connectionDidFinishLoading方法:

-(void)connectionDidFinishLoading:(NSURLConnection *)conn{
myData = [[NSString alloc] initWithData:xData encoding:NSUTF8StringEncoding];
SBJsonParser *jParser =  [SBJsonParser new];
NSError *error = nil;
NSArray *jsonObjects = [jParser objectWithString:myData error:&error];
NSMutableArray *books = [[NSMutableArray alloc] init];

for(NSDictionary *dict in jsonObjects)
{
    Book *b = [Book new];
    b.bookName =[dict objectForKey:@"name"];
    b.published = [dict objectForKey:@"published"];
    [books addObject:b];

}
self.bookArray = books;
[self.tableView reloadData];
NSLog(@"myData = %@",myData);
}
Run Code Online (Sandbox Code Playgroud)

如果我调试这个我正在jsonObjects填充我的收藏品.但我发现我的桌子还是空的.

只是为了澄清这是我的tableView方法:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath{
...
Book *b = (Book *)[self.bookArray objectAtIndex:[indexPath row]];
cell.textLabel.text = b.bookName;
....
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决我所缺少的问题吗?

NSI*_*Max 1

检查调用线程。除了 mainThread 之外,您不能在任何其他地方进行 UIKit 更新。我认为您的 connectionDidFinishLoading: 在单独的线程上调用,这就是这里的问题。

尝试

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});
Run Code Online (Sandbox Code Playgroud)