2016-07-10 28 views
0

上下文设置:儿童(专用队列) - >父(主队列) - >持久性存储协调员核心数据亲子语境竞争条件

救了我的孩子上下文时大约有50%的时间,我的父/主上下文无法识别更改,因此永远不会保存到持久存储区。

func saveContext(context: NSManagedObjectContext, childThread: Bool) { 
    if context.hasChanges { 

     do { 
      try context.save() 
      print("saved on mainThread: \(!childThread)!") 
     } catch { 
      //... 
     } 

     if context.parentContext != nil { // private context 
      dispatch_async(dispatch_get_main_queue(), { 
       print("preparing to save main context") 
       self.saveContext(context.parentContext!, childThread: false) 
      }) 
     } 
    } else { 
     print("no changes seen") 
    } 
} 

换句话说,之后我成功救上孩子方面,我saveContext方法准备保存上下文在主线程,只有约50%的时间,失败,并打印出“无变动看到“。

context.save()是异步执行的吗?我是否需要使用类似上下文保存的通知? (我认为这对亲子设置没有必要。)

回答

0

您应该使用performBlock/performBlockAndWait对上下文执行操作。

+0

这是在调用saveContext之前完成的。 – anders32