0

ネストされたコンテキストのないシングルスレッドの Core Data モデルを使用する OS X アプリケーションを開発しています。

defaultContext のメイン スレッドでオブジェクトを作成し、作成後にそれらを保存しようとしていますが、保存はエラーを返さずに失敗します。CoreData オブジェクトのメソッドを上書きしていませんが、MagicalRecord の最新バージョンを使用しています。

失敗するコード:

// pseudocode for createOrFetchWithData:inContext:
// fetch object from value in objectDict
// if(!object) create project in context
// [object importValuesForKeysWithObject:objectData] // MR method
// return object
MyObject *object = [MyObject createOrFetchWithData:objectData 
                                          inContext:[NSManagedObjectContext defaultContext]];
if(!object) return; // just to emphasise that I am sure the object is not nil.
[[NSManagedObjectContext defaultContext] saveOnlySelfWithCompletion:^(BOOL saveSuccessful, NSError *error) {
    if(saveSuccessful) {
       NSLog(@"yay");
    } else {
       NSLog(@"nay");
    }
}];

の戻り値[NSManagedObjectContext defaultContext]は nil ではなく、コードがメイン スレッドで実行されることを確認しました。

で設定されていない関係がありますが、データ モデルでMyObject *objectは としてマークされています。optional

この単純な操作が失敗する原因は何ですか? 問題なく保存できるエンティティは他にもありますが、この特定のケースは失敗します。

注: OS X Mavericks DP 8 を実行しています。

4

1 に答える 1

0

最後に、MagicalRecord の (そしておそらく CoreData の) メソッドの実装についての私の誤解でしたsave:: コンテキスト ( ) と親コンテキスト (!!) に変更がない場合[context hasChanges] == NO、保存は中止され、完了ブロックは、エラー オブジェクトなしで呼び出されNOます。successful

于 2013-09-25T21:39:40.357 に答える