- (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]为零,为什么?
答案 0 :(得分:1)
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];
}];