1

管理対象オブジェクトのコンテキストがどこに消えていくのかを理解しようと、頭を悩ませています。

私は元々、アプリデリゲート内でインスタンス化してから、NSWindowController内の保持されたプロパティに次のように渡します。

self.TPWC = [[TestPanelWindowController alloc] initWithWindowNibName:@"TestPanel"];
self.TPWC.managedObjectContext = self.managedObjectContext;
self.TPWC.persistentStoreCoordinator = self.persistentStoreCoordinator;
[TPWC.window makeKeyAndOrderFront:nil];

NSManagedObject次に、をインスタンス化して、次のように管理対象オブジェクトコンテキストに挿入するボタンがあります。

 NSManagedObject *newInstanceOfSomeEntity =

 [NSEntityDescription insertNewObjectForEntityForName:@"SomeEntity" 
 inManagedObjectContext:self.managedObjectContext];

この時点で、self.managedObjectContextどういうわけかゼロになっています。

windowDidLoadにブレークポイントを挿入しました。その時点で、の有効なインスタンスがあることを確認できますが、NSManagedObjectContextviewDidLoadと管理対象オブジェクトを挿入しようとするとどういうわけかnilになります。

カスタムイニシャライザーを作成して設定しようとしましたNSManagedObjectContextが、まだゼロになっています。

Core Dataは私にとって非常に新しいものであり、何が問題になっているのかを理解するのに苦労しています。

4

1 に答える 1

2

これは、コンテキストが消える理由に対する直接的な答えではありませんが、それでも問題を解決できる可能性があります。

アーキテクチャの観点からは、オブジェクト間、特にUIオブジェクト間で管理対象オブジェクトのコンテキストを渡す必要はありません。

代わりに、管理対象オブジェクトコンテキストを(おそらくコーディネーターと永続ストアと共に)インスタンス化し、パブリックプロパティを介してそのコンテキストへのアクセスを提供するグローバルシングルトンクラスが必要です。次に、ウィンドウコントローラーから、シングルトンオブジェクトからアクセスします。

(マルチスレッドを使用している場合は、異なるスレッドから同じコンテキストにアクセスして使用することに注意してください。)

于 2012-11-07T23:02:58.940 に答える