在打开WithCompletionHandler块之前调用numberOfRowsInSection

时间:2013-08-17 10:53:42

标签: objective-c uitableview core-data

 - (void)viewDidLoad
{
  [super viewDidLoad];

  if (self.document.documentState == UIDocumentStateClosed){
    [self.document openWithCompletionHandler:^(BOOL success) {

        self.list = [[Categories getArrayForFirstTable:self.document.managedObjectContext] mutableCopy];

    }];

 }
 [self.tableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

// Return the number of rows in the section.
return [self.list count];
}

在openWithCompletionHandler的块之前调用numberOfRowsInSection [self.list count]为零,为什么?

1 个答案:

答案 0 :(得分:1)

根据{{​​3}}

openWithCompletionHandler块是异步操作

  

您可以调用此方法来开始打开的方法调用序列,并异步读取文档。该方法从fileURL属性获取文档的文件系统位置。打开操作结束后,将执行completionHandler中的代码。

[self.tableView reloadData]通过-tableView:numberOfRowsInSection:

获得有意义的结果之前,您self.list将被执行,触发self.list = [[Categories getArrayForFirstTable:self.document.managedObjectContext] mutableCopy];

此代码可能符合您的需求:

[self.document openWithCompletionHandler:^(BOOL success) {
    self.list = [[Categories getArrayForFirstTable:self.document.managedObjectContext] mutableCopy]; 
    // At this point(no matter when), self.list is returned and you can use it.
    [self.tableView reloadData];
}];