2011-10-17 3 views
10

目的は、コアデータを操作するために現在のNSManagedObjectContextを取得することです。ストーリーボード使用時にNSManagedObjectContextを取得する

NSManagedObjectContext *context = [self.navigationController.delegate performSelector:@selector(managedObjectContext)]; 

:(私はコンテキストを必要な場所)

self.navigationController.delegate = self; 

と私はこのような何かができる:iOSの4.3で、私はそうのような(AppDelegate.mで)AppDelegateするUINavigationControllerのデリゲートを設定します今、iOS 5ではストーリーボードを使用していますが、これを達成する方法を理解するのは難しい時期です。私はいつもあなたのAppDelegate.hを渡したいとは思わないので、最初は代理人を使っていました。

答えて

12

@Roseを - アゲイン?非常にも、Appleが推奨されて:アップルDocから

ビューコントローラは、通常、アプリケーションデリゲート-これはアプリケーションアーキテクチャは、剛性になり、グローバルオブジェクトからコンテキストを取得してはいけません。また、ビューコントローラは、ネストされたコンテキストでない限り、独自のコンテキストを作成する必要はありません。これは、コントローラのコンテキストを使用して実行される操作が他のコンテキストに登録されていないことを意味するため、異なるView Controllerはデータに対して異なる視点を持ちます。

推奨方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
MasterViewController *controller = (MasterViewController *)navigationController.topViewController; 
controller.managedObjectContext = self.managedObjectContext; 
return YES; 
} 
+0

このトピックは古いですが、あなたは正しいので、正しい答えとしてマークしました。 – mmvie

+2

どうすれば、ビューコントローラをマネージオブジェクトコンテキストに渡したいのですが、それはapplicationDidFinishLaunchingのどこにもありません。それは私のアプリの他のどこかに5レベルの深さで作成されます。 – user798719

+0

@ user798719注射するのは悪いことではありません。 iOSプラットフォームで利用可能なDependencyInjectionフレームワークをご覧ください – badeleux

11

これは何が必要である場合、私は知りませんが、それは助けることがあります。
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];

+0

パーフェクト、ありがとう! – mmvie

+0

おい、たくさんのありがとう!! – Farini

+0

私は、app delegateから[managedObjectContext]をビューに渡す方法を理解しようとすると、あまりにも多くの時間を費やしたと思います。もちろん、より良い解決策はappdelegateからmocを取得することです。驚くばかり! – Farini

関連する問題