いくつかの背景:
大量のデータをローカルDBに保存しようとしていますが、できるだけ効率的に保存したいと考えています。
シナリオ:
アドレスが次のような連絡先に関連付けられているなど、相互に関連している多くのエンティティがあります。
アドレス<<->連絡先
関係を管理するために、NSManagedObjectの各サブクラスにメソッドを記述しました。以下にいくつかのコードスニペットを示します。
// class Contact
- (void)manageRelationships
{
@autoreleasepool {
LocalDBManager *localDBManager = [[LocalDBManager alloc] init];
// managing relationships
// map associated addresses
NSPredicate *addressIdPredicate = [NSPredicate predicateWithFormat:@"%K == %@",ADDRESSID,self.addressid];
// below method returns an object as fault by firing a fetch request against context
NSSet *retrievedAddresses = [localDBManager retrieveManagedObjectsForEntity:ADDR_ENTITY withPredicate:addressIdPredicate asFault:YES withPropertyValues:NO error:nil];
self.addresses = retrievedAddresses;
// managing few more relationships
}
}
考慮すべきポイント:
オブジェクトには複数の関係が存在する可能性があるため、関係をマッピングするときにメモリ消費量が増えることはわかっています。
質問:
関係がマッピングされたら、加えられた変更を失うことなく、オブジェクトを障害に戻したいと思います。
アップルのドキュメントといくつかのグーグルから、refreshObject:mergeChanges:メソッドを使用できることがわかりました。したがって、manageRelationshipsメソッドのコードブロックの最後に以下の行を追加することを計画しています。
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
私は少し混乱していて、それを知りたいです-
オブジェクトに加えられた変更が永続ストアに保存され、オブジェクトが障害に変わることを意味しますか?はいの場合、NSManagedObjectContextのsaveメソッドと同等と見なすことができますか
提案してください。