prepareForDeletion被调用两次:deleteObject,第二次我保存

时间:2018-06-17 03:53:31

标签: xcode asynchronous core-data

问题

在单独的帖子中,删除prepareForDeletion时会调用session。然后,在主线程中,main调用prepareForDeletion

第一次调用prepareForDeletion时,所有属性都在那里,正如预期的那样。但是,第二次,都是零。因此,我需要prepareForDeletion的原因导致我的应用程序崩溃,因为当它们不期望删除时值为零。

我的代码

我有一个CalendarService,可以监听事件存储iCal中所做的更改。发布此通知后,CalendarService会更新所有Sessions,以确保它们不会过时或删除其活动。

func updateStaleSessions就是这样

  1. 以新的privateContext
  2. 获取db中的所有会话 每个会话
  3. :使用session.eventId查找关联的日历活动
    • 如果找到,请使用找到的日历事件更新会话的属性
    • 如果未找到,请使用privateContext
    • 从数据库中删除会话
  4. 检查完所有会话后,保存privateContext
  5. 发布updateStaleSessions通知后,使用OperationQueue调用

    eventStoreDidChange

    privateContext的创建方式如下:

    let moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    moc.persistentStoreCoordinator = PersistanceStack.persistentContainer.persistentStoreCoordinator
    return moc
    

    这是我崩溃时的调用堆栈

    call stack on main thread

    我只是试图从主线程中实现这个updateStaleSessions,所以我应该采取不同的做法,我愿意尝试:)

0 个答案:

没有答案