7

一時的な管理対象オブジェクト コンテキストを作成しようとしています。ユーザーが情報を入力する画面を数回表示した後、そのコンテキストをメイン コンテキストとマージします (「不完全な」オブジェクトが挿入されないようにするため)。これは、一時的なコンテキストを作成する方法と、それにオブジェクトを挿入する方法です。

if (!self.someManagedObject) {

    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:@[[NSBundle mainBundle]]];
    NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    [storeCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:nil];

    NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator:storeCoordinator];

    self.someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeObject" inManagedObjectContext:managedObjectContext];
    NSLog(@"%@", self.someManagedObject.managedObjectContext);
}

これは の一部ですviewDidLoad。コンソールでは、管理対象オブジェクト コンテキストに値があることが示されます。

ただし、この if ステートメントの直後 ( 内viewDidLoadであっても、 self.someManagedObject.managedObjectContextnil です。ローカル変数が使用できなくなる理由はわかります (単純にスコープ外になります)。ただし、管理対象オブジェクトのプロパティは引き続き設定する必要があります。

管理対象オブジェクトのコンテキストを格納するプロパティを作成できることはわかっていますが、この方法で機能させたいと考えています。

4

2 に答える 2

19

状況は異なりますが、最近、同じ問題に再び遭遇しました。メインのオブジェクト コンテキストとは完全に分離された、一時的な管理オブジェクト コンテキストが必要でしたが、範囲外になると、それが消えるという問題に再び遭遇しました。今回はさらに調べてみることにしましたが、最終的にmanagedObjectContextは のプロパティでNSManagedObjectはなく、メソッドであることに気付きました。これは、次の 2 つのいずれかを意味します。

  1. 基になる実装でプロパティを使用する場合、そのプロパティはコンテキストへの強い参照を保持しません
  2. 管理対象オブジェクトのコンテキストが他の方法で派生した場合、そのコンテキストへの強い参照も保持されません。

いずれの場合も、コンテキストには強い参照がなく、範囲外になり、NSManagedObjects にはnil managedObjectContext.

解決策は、強力なプロパティを作成してコンテキストを保持することでした。

于 2013-10-19T19:16:32.773 に答える
-3

2 番目の管理対象オブジェクト コンテキストが必要な理由がわかりません。IMHO、特定の目的を果たさない複雑さをアプリに導入しています。

新しいオブジェクトをメイン コンテキストに挿入します。ユーザーにデータを入力させます。彼が途切れた場合は、単に電話してください

[managedObjectContext rollback];

または、ユーザーが終了し、すべてのデータが検証された場合は、呼び出します

[managedObjectContext save:nil];
于 2012-08-04T11:18:12.903 に答える