次のように 2 つのマネージド オブジェクト コンテキストが設定されたアプリがあります。
- 親コンテキスト: 永続ストアにリンクされた NSPrivateQueueConcurrencyType。
- メイン コンテキスト: NSMainQueueConcurrencyType、親コンテキストの子。
新しいマネージド オブジェクトをメイン コンテキストに挿入するときは、メイン コンテキストを保存してから、次のように親コンテキストを保存します。
[context performBlockAndWait:^{
NSError * error = nil;
if (![context save: &error]) {
NSLog(@"Core Data save error %@, %@", error, [error userInfo]);
}
}];
[parentContext performBlock:^{
NSError *error = nil;
BOOL result = [parentContext save: &error];
if ( ! result ) {
NSLog( @"Core Data save error in parent context %@, %@", error, [error userInfo] );
}
}];
私の理解では、管理オブジェクトが最初に作成されたとき、一時的なobjectID
. 次に、メイン コンテキストが保存され、一時 ID を持つこのオブジェクトが親コンテキストに到達します。次に、親コンテキストが保存されます。この最後のコンテキストが保存objectID
されると、親コンテキストの一時が永続に変換されobjectID
ます。
そう:
- 永続的なオブジェクト ID は、メイン (子) コンテキストに自動的に反映されますか?
- でオブジェクトの永続 ID を強制的に取得し
[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
、アプリをバックグラウンドで実行し、再アクティブ化し、リロードし、メイン コンテキストの を使用してオブジェクトを取得しobjectWithID:
、プロパティにアクセスすると、次のようになります。「CoreData は ... の障害を実行できませんでした」.