1

私のコードのいくつかについて疑問があるため、質問があります。NSManagedObject の配列では、それらのいくつかを取り除く必要があります。これが(以下の)私が使用するコードです。私の経験の範囲内で、それはうまくいくと言わざるを得ません。したがって、私の質問は、既存の問題を解決することではなく、何か間違ったことをしていないことを確認することです

for (NSManagedObject *item in objects) {
    if ([[item valueForKey:@"OK"] intValue]>1) {
        [context deleteObject:item];
        continue;
    }
}

ループ中に配列「オブジェクト」の内容を変更しているため、コードが安全ではないのではないかと心配しています。もちろん、それは舞台裏で物事がどのように処理されるかにかかっていますが、それは私にはわかりません。

ありがとう。

4

2 に答える 2

1

あなたはあなたのdeleteObject行で削除のためにアイテムにフラグを立てているだけです。コンテキストに削除を強制的に実行させるには、関数の下部でこれを実行します。

NSError *error;
if (![context save:&error]) {
    return;
}
于 2012-07-17T13:28:57.097 に答える
1

呼び出すdeleteObject:ときは、オブジェクトに削除のフラグを立てており、すぐに削除するのではなく、反復中に反復しているコレクションからオブジェクトを削除することもありません。

ドキュメントから:

変更がコミットされたときに永続ストアから削除するオブジェクトを指定します。

呼び出し後に削除されたアイテムを調べるdeleteObject:と、オブジェクトがまだ存在していることがわかりますが、isDeletedフラグが に設定されていYESます。NSManagedObjectContextが次に保存されるときに、オブジェクトは実際には削除されます。

于 2012-07-17T09:05:04.273 に答える