私は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に耳を傾けました、そして私はそれを誤りに変えるためにそれを要求します。NSManagedObjectContextDidSaveNotificationinsertedupdatedrefreshObject: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];
}
}
}