2012-12-07 11 views
8

を保存しませんここで魔法のレコードは、私は魔法のレコードを使用しています

MR_saveWithErrorCallback:](0xaaa6bd0) NO CHANGES IN CONTEXT <NSManagedObjectContext (0xaaa6bd0): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD *** - NOT SAVING 

は、コードは次のとおりです。

   for(int i = 0; i < count; i += 1) 
      { 
       // results = array of all services from site 
       NSDictionary * result = [results objectAtIndex: i]; 

       NSNumber * sid = @([[result objectForKey: @"id"] intValue]); 
       NSNumber * parent = @([[result objectForKey: @"parent"] intValue]); 
       Service * service = [Service createEntity]; 

       NSString * image = [NSString stringWithFormat: @"%@", [result objectForKey: @"image"]]; 

       NSString * name = [NSString stringWithFormat: @"%@", [result objectForKey: @"name"]]; 
       NSString * machine_name = [NSString stringWithFormat: @"%@", [result objectForKey: @"machine_name"]]; 


       [service setDate: [NSDate date]]; 
       [service setSid: sid]; 
       [service setName: name]; 

       [service setImage: image]; 
       [service setParent: parent]; 
       [service setMachine_name: machine_name]; 


       [[NSManagedObjectContext defaultContext] saveNestedContexts]; 

答えて

7

問題は、正しいコンテキストを保存していないことです。ソースを見ると、[Service createEntity]は現在のスレッドのコンテキストでManagedObjectを作成します。 defaultContextにはありません。

[[NSManagedObjectContext defaultContext] saveNestedContexts]の代わりに、現在のスレッド(つまり、ManagedObjectが作成されたコンテキスト)のコンテキストを保存する必要があります。だから、コードでは、それは私が私の迅速なプロジェクトでは、私のため

5

あなたはsaveInBackgroundWithBlock:ユーティリティメソッドを使用してみましたか?

そうでない場合は、次のようなコードを試してみるとよいでしょう。それはバックグラウンドで一度にすべてのオブジェクトを保存し、メインスレッド上で完了ブロックを実行するだろうことに注意してください。それ以外は

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 
    Service *service = [Service createInContext:localContext]; 

    ... set values ... 
} completion:^{ 
    ... 
}]; 

、あなたはそれが問題だかどうかを確認するために[[NSManagedObjectContext defaultContext] hasChanges]あれば返すYESを見ることができますセービングまたはエンティティ自身との関係

0

移動ラインループの外

[[NSManagedObjectContext defaultContext] saveNestedContexts]; 

次のようになります。それでは

MagicalRecord.setupCoreDataStack() 

Iディスクに保存するには、以下を実行する必要があります。

NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait() 
1

を働いた、[[NSManagedObjectContext MR_contextForCurrentThread]

関連する問題