NSManagedObjectContext 内のすべてのオブジェクトを繰り返し処理し、手動で更新したいと考えています。次に、すべての管理対象オブジェクトを更新する必要があります。これを行う最善の方法は何ですか?
3 に答える
理論的には、管理対象オブジェクトモデル内のすべてのエンティティの説明を繰り返し処理し、それらに対して述語なしのフェッチリクエストを作成してから、返されたすべてのオブジェクトをループして更新を行うことができます。例:
// Given some NSManagedObjectContext *context
NSManagedObjectModel *model = [[context persistentStoreCoordinator]
managedObjectModel];
for(NSEntityDescription *entity in [model entities]) {
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entity];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
// Error-checking here...
for(NSManagedObject *object in results) {
// Do your updates here
}
}
isKindOfClass:
クラスの同等性をテストするか(または関連するメソッドを使用)、または現在のエンティティがどのクラスであるかを把握する(メソッドと組み合わせてmanagedObjectClassName
プロパティを使用する)ことにより、必要に応じて返されたNSManagedObjectsをキャストできることに注意してください。entity
NSClassWithName()
これは、問題に対する非常に手の込んだアプローチのようです。データに不良データがロードされている場合は、データのインポート中に修正することを強くお勧めします。ティムの答えはあなたがしていることにはうまくいきますが、私はあなたがこれを間違っていると強く疑っています. 潜在的に悪いデータを探してデータベース全体を反復処理することは、非常に非効率的です。
管理オブジェクトが「間違ったデータ」で作成されている場合は、モデルのすべてのエンティティのすべてのプロパティに対してデフォルト値が設定されていることを確認します。このようにして、コンテキストにオブジェクトを挿入するたびに、それらの値が含まれていることを確認できます。そこから、プロパティを必要なものに設定できます。