私の話に興味がない場合は、一番下にある 2 つの番号付きの質問にジャンプしてください。
この質問では、CoreData 処理を AppDelegate から分離するかどうかについて説明します。関心の分離方法を試すことにしました。
Apple は AppKit アプリケーションのトピックに関するドキュメントを提供していないため、私の質問は次のとおりです。
- CoreData スタックを AppDelegate から分離する方法を示すドキュメント、リソース、またはサンプル プロジェクトはありますか?
私の現在の状態は次のとおりです。
とAppDelegate
のDataController
サブクラスである がありNSTreeController
ます。は、モデルのオブジェクト (グループとリーフ) を表示DataController
するコントロールです。NSOutlineView
CoreData
CoreData
Xcodeの (ドキュメント ベースではない) テンプレートから始めました。
- CoreData-Stack 関連のすべてのメソッドを から に移動し
AppDelegate
ましたDataController
。 - 私は
DataController
シングルトンを作りました。 - 真の
AppDelegate
関連メソッドを次のDataController
ように転送しました:
AppController.m 内
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window{
return [[[DataController sharedController] managedObjectContext] undoManager];
}
- (IBAction)saveAction:(id)sender{
[[DataController sharedController] saveAction:sender];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender{
return [[DataController sharedController] applicationShouldTerminate:sender];
}
- もちろん、呼び出されたメソッドはすべて DataController.m に実装されています。
でオブジェクトを追加および削除できるようになりNSOutlineView
、元に戻すとやり直しも機能します。ただし、File-Save メニュー項目はグレー表示されています。cmd+s を押すと、OS から bing が表示されます。(これは、AppDelegate に CoreData スタックがあったときに「魔法のように」機能していました。)
アプリケーションを終了すると、のオブジェクトが呼び出しを通じて (xml を見た) にOutlineView
書き込まれます。ただし、アプリケーションを再起動すると、オブジェクトは .xml ファイルに復元されません。(これは、AppDelegate に CoreData スタックがあったときに「魔法のように」機能していました。)persistentStore
applicationShouldTerminate
OutlineView
- テンプレートに隠されている魔法の接着剤コードは何ですか?
CoreData
cmd+s を機能させ、[ファイル] - [保存] メニュー項目を有効にしますか? - アプリケーションの起動時
mangedObjectContext
に myのコンテンツを my に復元する隠しコード。OutlineView