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