代码之家  ›  专栏  ›  技术社区  ›  Mugunth

生产商和消费者对核心数据的问题

  •  6
  • Mugunth  · 技术社区  · 16 年前

    我有一个核心数据应用程序。在Producer线程中,我从Web服务中提取数据并将其存储在我的对象中,然后调用Save。 我的使用者对象是一个显示相同内容的表视图控制器。 但是,应用程序崩溃了,我 nsfetchedResultsController错误:应在节(空)中查找要删除的对象(实体:feedEntry;ID:0xf46f40;数据:)。

    在控制台上。当我调试它时,一切正常。所以我明白这就像一个种族问题。

    这些问题是如何解决的?用核心数据设计生产者-消费者应用程序的最佳方法是什么?

    2 回复  |  直到 15 年前
        1
  •  16
  •   sbooth    16 年前

    如果你的目标是美洲豹或更晚,苹果已经让事情变得更容易接触。

    在生产者线程中,创建一个与主线程中的MOC具有相同PSC的MOC。您可以在此线程中从WebService中提取对象,创建新对象,并将其保存为普通对象。

    在使用者线程中,将控制器添加为nsmanagedObjectContextDidSaveNotification的观察员。您的回调应该类似于:

    - (void) managedObjectContextDidSave:(NSNotification *)notification
    {
      NSManagedObjectContext *managedObjectContext = [notification object];
      if(managedObjectContext != self.managedObjectContext)
        [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
    }
    

    这样,保存在生产者线程中的对象将自动拉入您的消费者线程。

        2
  •  0
  •   Marc Charbonneau    16 年前

    核心数据通常不是线程安全的。我的首选方案是在后台线程上做最少的工作,并在从Web服务检索到核心数据实体后将创建核心数据实体所需的数据传递给主线程。不过,看看 this document . 如果需要,有一些策略可以跨线程使用核心数据。