gpt4 book ai didi

objective-c - NSFetchedResultsController 重复行

转载 作者:太空狗 更新时间:2023-10-30 03:38:37 25 4
gpt4 key购买 nike

我在使用辅助线程刷新 NSFetchedResultsController 内容时遇到奇怪的行为,我想知道这是一个常见问题,或者我可能做错了什么。

我有一个集中的 NSManagedObjectContext 驻留在我的主要委托(delegate)对象中,所有 View Controller 都使用和共享它。通过执行提取并调用其委托(delegate)方法加载表后,将在后台启动辅助线程以更新其结果。然而,只有在奇怪的情况下,当插入新条目时,它们才会在 TableView 中重复。如果我退出并重新进入,重复的行就会消失,这是什么让我认为它们只存在于托管对象上下文中。

这些是以下步骤:

  1. 后台 NSOperation 线程创建一个受限上下文,该上下文链接到主应用程序委托(delegate)的相同持久存储。
  2. 新线程开始监听 NSManagedObjectContextDidSaveNotification 通知。
  3. 新行被删除、更新或插入到辅助上下文中,当达到某个批处理大小时总是进行保存调用。
  4. 在后台保存时,通知方法调用主线程上的集中式上下文 mergeChangesFromContextDidSaveNotification 选择器,如下所示。

    -(void)mergeChanges:(NSNotification *)notification
    {
    NSManagedObjectContext *mainContext = [[appDelegate sharedDelegate] managedObjectContext];

    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
    withObject:notification 
    waitUntilDone:NO];
    }
  5. 完成操作后,监听器将被移除并释放辅助上下文。

有没有人知道是什么原因导致我的 TableView 行重复,以及如何解决?

预先感谢您的帮助。

最佳答案

您实际上不能在托管对象上下文中拥有“重复”对象,因为上下文中的每个对象都必须是唯一的。维护唯一对象是上下文的核心功能,所以它不会发生。所以,你有两个条件之一:

  1. 您正在创建两个或多个具有相同属性的托管对象,以便它们在分类到 TableView 时一起显示。
  2. 在某些情况下,您的 TableView 数据源逻辑实际上是将来自同一托管对象的数据两次返回给 TableView 。这会产生上下文中存在重复托管对象的错觉。

我认为后者的可能性更大。

关于objective-c - NSFetchedResultsController 重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278241/

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