1

私はNSManagedObjectContextデータを表示するためにいくつかのUIViewControllersで使用されるメインを持っています(これはUITableView リスト付きですDepartment

3つのエンティティ1つDepartmentはto- onetoBossで、to-many to Employee(この場合はemployeeNSDataイメージ)属性があります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に耳を傾けました、そして私はそれを誤りに変えるためにそれを要求します。NSManagedObjectContextDidSaveNotificationinserted updatedrefreshObject: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];
        }
    }
}
4

1 に答える 1

1

refreshObject:mergeChanges:mergeChanges引数にNOを渡して、を使用して特定のオブジェクトを障害に変えることができます。

オブジェクトを障害に変える(フラグはNO)とは、関連する管理対象オブジェクト(つまり、オブジェクトが参照しているオブジェクト)への強い参照が壊れていることを意味します。したがって、このメソッドを使用して、オブジェクトグラフの必要な部分をトリミングすることもできます。メモリ使用量を制限します。

ここのドキュメント

于 2013-03-03T11:21:45.657 に答える