0

Core Dataデータベースの各エンティティに、データベースが開かれたらすぐにリセットしたいフラグ属性があります。NSFetchRequestを実行せずに、すべてのオブジェクトに対してこのフラグを(同じ値に)すばやく設定し、フラグを更新して、すべてを再度保存する方法はありますか?アプリの読み込み時にこれを実行しているので、最も効率的な方法を使用していることを確認したいと思います。

4

3 に答える 3

1

いいえ、これはコアデータの制限の1つであり、バッチ更新を念頭に置いて設計されていません。

一部のオブジェクトにすでに新しい値がある場合は、フェッチ述語を使用してそれらをフィルターで除外することにより、処理を少し高速化できます。たとえば、ブールフラグをNOに設定している場合は、現在YESに設定されているオブジェクトのみをフェッチします。

また、GCDを使用dispatch_apply()し、並行して更新を行うと役立つ場合があります。1つではなく複数のコアを使用することで、ある程度のブーストが得られます。管理対象オブジェクトはスレッドセーフではありませんが、(a)変更を保存する前にすべての更新が完了していることを確認し、(b)他のスレッドの管理対象オブジェクトまたは管理対象オブジェクトコンテキストを混乱させない限り、これは機能するはずです。更新の進行中。

于 2012-11-26T18:16:10.170 に答える
1

アプリが読み込まれる前にこの更新を完了することが不可欠ですか?

ロードしてから完了するまでに数秒かかる場合、アプリに影響しますか?

もしそうなら、あなたはそれをバックグラウンドスレッドに捨てることができます。これは、アプリがすぐに読み込まれることを意味しますが、コアデータはBGで更新されます。

于 2012-11-26T15:08:08.260 に答える
1

いいえ、フェッチ、変更、保存を回避する明確な方法は実際にはありません。もちろん、UIをブロックしないように、バックグラウンドスレッドで実行することをお勧めします。

ただし、全体的な設計について考え、これが本当に必要かどうかを質問することをお勧めします。

于 2012-11-26T15:08:21.010 に答える