gpt4 book ai didi

iphone - 当返回的对象也可能从持久存储中删除时,如何处理 fetchedResultsController 返回的错误对象

转载 作者:可可西里 更新时间:2023-11-01 05:47:54 24 4
gpt4 key购买 nike

  1. 在我的简单实验中,fetchedResultsController 似乎没有返回错误的对象。 fetchedResultsController 是否可能为特定索引路径返回错误的核心数据对象?
  2. 下面的示例代码在主线程上运行。假设在“A 点”,一个后台线程删除了刚刚由获取的结果 Controller 返回的对象并将其保存到持久存储中。现在,当我们尝试访问 dataObject 上的属性时,我们崩溃了,因为由于数据已从持久存储中删除,无法实现故障。
  3. 我看到的一件事是,这种关系更容易出错。因此,在“A 点”,可以说父对象已从持久存储中删除。然后,当尝试访问父级的名称属性时,将发生错误,因为无法满足故障。
  4. 防止此类问题的最佳方法是什么?

示例代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = code_for_cell_reuse_here;

PersonModelObject *dataObject = (PersonModelObject *)[self.fetchedResultsController objectAtIndexPath:indexPath];

/* Point A */

cell.textLabel.text = dataObject.name;
cell.detailTextLabel.text = dataObject.parent.name;

return cell;
}

最佳答案

您需要注意来自其他线程的 NSManagedObjectContextDidSaveNotification 并刷新您的上下文。

这可以同步完成,通过使用 performSelectorOnMainThread 或使用 block 阻塞主线程更新来避免竞争条件。

然后您可以手动或使用 refreshFromContextDidSaveNotification:mergeChanges: 更新您的本地托管对象上下文,但如果数据量足够大,可能最简单的方法是在托管对象上下文上调用 -reset 并在获取结果 Controller 。

关于iphone - 当返回的对象也可能从持久存储中删除时,如何处理 fetchedResultsController 返回的错误对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com