2016-07-10 62 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