私はNSManagedObjectContext
データを表示するためにいくつかのUIViewControllersで使用されるメインを持っています(これはUITableView
リスト付きですDepartment
)
3つのエンティティ1つDepartment
はto- onetoBoss
で、to-many to Employee
(この場合はemployee
(NSData
イメージ)属性がありますallow external storage
)。
画像をバッチでインポートしているので、独自のを持っているバックグラウンドスレッドでインポートしていますNSManagedObjectContext
。
インポートは、Boss
エンティティとすべてのを作成Employee
し、関係を設定することで構成されます。
今私の問題は:
child context
インポートと保存にのを使用するとmain context
、両方のコンテキストに変更がなくても、すべての画像がメモリに残ります。- を使用すると
context with no relation to the main context
、画像はメモリに残りませんが、新しいデータは表示されませんUIViewController
(明らかにmain context
、によって行われた変更が通知されないためbackground context
)
したがって、画像をメモリに保存せずに変更を表示したいのです(つまり、画像をメモリに保存せずに、関係がDepartment
あることを知りたいのです)。Boss
要するに、私は彼らcontext
が救われるとすぐに彼らを過失に変えて欲しいのです。
編集:問題は、を保存するchild context
と、とマージmain context
され、そこから新しく挿入された画像がメモリに残ることだと思います:/そしてそれらを解放する方法がわかりません(そして、メモリの警告があっても自動解放されません...)
編集2:私はそれを修正したと思います、これが私がしたことです:
- 私はに
child context
縛られたものを使用しました、そして私はそれを すべてmain context
に耳を傾けました、そして私はそれを誤りに変えるためにそれを要求します。NSManagedObjectContextDidSaveNotification
inserted
updated
refreshObject:mergeChanges:
すべてのコンテキストからのすべての通知に登録しました。
-(void)contextDidSave:(NSNotification*)saveNotification {
NSManagedObjectContext *defaultContext = saveNotification.object;
NSArray *insertedObjects = [saveNotification.userInfo valueForKey:@"inserted"];
if (insertedObject) {
NSLog(@"INSERTED : %@", insertedObjects);
for (NSManagedObject *object in insertedObjects) {
[defaultContext refreshObject:object mergeChanges:NO];
}
}
NSArray *updatedObjects = [saveNotification.userInfo valueForKey:@"updated"];
if (insertedObject) {
NSLog(@"UPDATED : %@", updatedObjects);
for (NSManagedObject *object in updatedObjects) {
[defaultContext refreshObject:object mergeChanges:NO];
}
}
}