3

シングルトンUIApplicationを使用して、AppDelegateのmanagedObjectContextにアクセスしたいと思います。しかし、私が書くとき

[[[UIApplication sharedApplication] delegate] managedObjectContext]

また

[[[UIApplication sharedApplication] delegate] __managedObjectContext]

動作しません。

しかし、この行は正常に機能します:

NSLog(@"Seeking for the AppDelegate : %@", [[[UIApplication sharedApplication] delegate] class]);

解決策はありますか?ニールズ

4

2 に答える 2

11

このようなシングルトンを使用することは悪い習慣であり、CoreDataのドキュメントでは明示的に推奨されていません。

http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

ビューコントローラは通常、アプリケーションデリゲートなどのグローバルオブジェクトからコンテキストを取得するべきではありません。これにより、アプリケーションアーキテクチャが厳格になる傾向があります。また、View Controllerは通常、独自に使用するためのコンテキストを作成するべきではありません。これは、コントローラーのコンテキストを使用して実行された操作が他のコンテキストに登録されていないことを意味する場合があります。そのため、ビューコントローラーが異なればデータに対する視点も異なります。

ビューコントローラを作成するときは、コンテキストを渡します。既存のコンテキストを渡すか、(新しいコントローラーに個別の編集セットを管理させたい状況では)そのために作成した新しいコンテキストを渡します。通常、表示される最初のView Controllerに渡すコンテキストを作成するのは、アプリケーションデリゲートの責任です。

依存性注入(つまり、ビューコントローラーに必要なものを与える)は、ほとんどすべての状況で優れています。[[UIApplication sharedApplication] delegate]コードを再利用したり、テストを記述したりするのが難しくなるため、アプリケーションのコード全体を見るのは本当に良くありません。

于 2011-07-08T11:57:43.657 に答える
7

次のように、実際のアプリデリゲートの実装にキャストしてみてください

 [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

そして追加するには

#import "MyAppDelegate.h"

ファイルの先頭にあります。

于 2011-07-08T09:52:09.507 に答える