1

我正在尝试交换用于 UITableView 的 NSFetchedResultsController,但它需要几行代码,我担心另一个线程可能会尝试在中途访问它并导致应用程序崩溃。这是我目前正在使用的代码:

如果获取的结果控制器不存在,则在 getter 中创建它,因此下次表视图尝试访问它时,它将重新生成。

- (void)regenerateFetchedResultsController
{
    self.fetchedResultsController = nil;

    [self loadData]; // Loads data into the fetched results controller.
    [self.tableView reloadData];
}

我猜想如果在这个方法的中间有什么东西试图访问 FOC 会出错,所以我想我会使用 UITableView 的beginUpdatesendUpdates方法以及方法的开始和结束。

但是,似乎你不能在andreloadData之间进行,所以我真的不知道还有什么可以尝试的。beginUpdatesendUpdates

4

1 回答 1

0

所有表视图数据源方法(、、、numberOfSectionsInTableView... numberOfRowsInSectioncellForRowAtIndexPath仅在主线程上调用。因此,如果您regenerateFetchedResultsController也在主线程上运行,则不会发生任何其他方法在此期间访问 FRC。

它可能取决于具体做什么[self loadData],但是将获取的结果控制器设置为nil并通过调用让它“自动重新创建”reloadData是一种标准模式。

于 2013-05-25T15:43:57.757 回答