0

これはバックグラウンド スレッドにあります。これはプライベート同時実行型のコンテキストであり、コンテキスト performBlock 内で実行されます。私はそれを正しくやっています、少なくとも私はそう思っています。

私はコアデータの初心者ではありませんが、これをしばらく見つめていたので、明らかな何かを見落としている可能性があります。

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

FFXCollection *backgroundCollection = (FFXCollection *) [context objectWithID:collectionID];

//At this point backgroundCollection.managedObjectContext is the same as context

NSError *error = nil;
[context save:&error];
NSLog(@"error %@", error); //Note that there is no error here

if (!backgroundCollection.managedObjectContext) {
DLog(@"why not?"); //At this point the managedObjectContext is nil!!!
}

管理対象オブジェクト内で managedObjectContext が nil になるのはなぜですか?

この例は不自然ですが、私の問題を示しています。私の実際のコードでは、保存が発生し、関係を設定しようとしています。次に、別の保存が発生すると、上記のために検証エラーが発生します。

ありがとう

4

1 に答える 1

1

代わりに、existingObjectWithID を使用してください。

existingObjectWithID:error: 指定された ID のオブジェクトを返します。

  • (NSManagedObject *)existingObjectWithID:(NSManagedObjectID )objectID error:(NSError * )error パラメータ objectID 要求されたオブジェクトのオブジェクト ID。error objectID で指定されたオブジェクトの取得に問題がある場合、戻り時に問題を説明するエラーが含まれます。戻り値 objectID で指定されたオブジェクト。オブジェクトがフェッチできない場合、存在しない場合、または障害が発生しない場合は、nil を返します。

解説 指定された ID を持つマネージド オブジェクトがコンテキストに既に登録されている場合、そのオブジェクトは直接返されます。それ以外の場合、対応するオブジェクトはコンテキストにフォールトされます。

データがキャッシュされていない場合、このメソッドは I/O を実行する可能性があります。

objectWithID: とは異なり、このメソッドは fault を返しません

提供状況 OS X v10.6 以降で利用可能。関連項目 – objectWithID: – objectRegisteredForID: NSManagedObjectContext.h で宣言

于 2013-05-03T16:12:59.107 に答える