8

私は魔法のレコードを使用しています: https://github.com/magicalpanda/MagicalRecord

Magical Record と Core Data を使用して、Web サイトから取得したレコードを sqllite データベースに保存しようとしていますが、エラーが発生し続けます。

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];
4

4 に答える 4

7

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

したがって、代わりに[[NSManagedObjectContext defaultContext] saveNestedContexts]、現在のスレッドのコンテキスト (つまり、ManagedObject が作成されたコンテキスト) を保存する必要があります。したがって、コードは[[NSManagedObjectContext MR_contextForCurrentThread]

于 2012-12-17T23:59:18.670 に答える
5

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

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

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

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

それ以外に[[NSManagedObjectContext defaultContext] hasChanges]、保存またはエンティティ自体に問題があるかどうかを確認するために YES を返すかどうかを確認できます。

于 2012-12-08T15:19:55.873 に答える
1

私の迅速なプロジェクトでは、次のことを行います。

MagicalRecord.setupCoreDataStack()

したがって、ディスクに保存するには、次の手順を実行する必要があります。

NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait()
于 2016-02-03T22:23:56.793 に答える
0

ラインを移動

[[NSManagedObjectContext defaultContext] saveNestedContexts];

for ループの外では、うまくいきました

于 2013-02-24T17:28:49.617 に答える