0
 - (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] 为零,为什么?

4

1 回答 1

1

openWithCompletionHandlerblock 是一个异步操作,根据苹果文档

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

因此,在您通过以下方式获得有意义的结果之前,您[self.tableView reloadData]将被执行,这会触发-tableView:numberOfRowsInSection:self.listself.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];
}];
于 2013-08-17T11:05:18.767 回答