2

iCloudCoreDataRecipes サンプルによく似たアプリをセットアップしました (iCloud と組み合わせて Core Data を使用します)。アプリの委任で、私は観察します

NSPersistentStoreDidImportUbiquitousContentChangesNotification

通知が来たら電話する

[context mergeChangesFromContextDidSaveNotification:note];

この通知を受け取ったときに実行したい追加の処理がありますが、NSDeletedObjectsKey セットに存在する NSManagedObjectID によって識別されるオブジェクトの使用に問題があります。

NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
for (NSManagedObjectID *oid in deletedObjects) {
    NSManagedObject *obj = [context objectWithID:oid];
}

objのプロパティにアクセスすると、nil になります。

次に、mergeChangesFromContextDidSaveNotification を呼び出す前に、上記のコードを実行してみました。

これを行うと、ほとんどの場合、オブジェクトのプロパティにアクセスできました。場合によっては、fault を実行できないという例外が発生します。レコードはコア データ ストアから既に削除されています。

通知が到着する前にオブジェクトがコンテキストにロードされていれば (つまり、オブジェクトがアプリ内で表示/アクセスされていれば)、削除されたオブジェクトのプロパティへのアクセスが機能することに気付きました。

私の問題は、削除されたオブジェクトに関連するクリーンアップを行いたいということです。私の NSManagedObject には、読み取りたいプロパティがあり、その値に関連する Core Data 以外の作業を実行するために使用します。

私は何が欠けていますか?これを行うことは可能ですか?

4

1 に答える 1

2

あなたはおそらく見るべきです

- (void)prepareForDeletion;

NSManagedObjectサブクラスでそれをオーバーライドします。

于 2012-07-05T12:43:14.997 に答える