使用Storyboard时获取NSManagedObjectContext

mmv*_*vie 10 delegates objective-c storyboard nsmanagedobjectcontext

目标是获取当前的NSManagedObjectContext以使用Core Data.在iOS 4.3中,我将UINavigationController的委托设置为AppDelegate,如此(在AppDelegate.m中):

self.navigationController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情(无论我需要上下文):

NSManagedObjectContext *context = [self.navigationController.delegate performSelector:@selector(managedObjectContext)];
Run Code Online (Sandbox Code Playgroud)

现在,在iOS 5中,我使用的是Storyboard,我很难搞清楚如何实现这一目标.我首先使用了一个代理,因为我不认为你想要一直传递你的AppDelegate.h.

bad*_*eux 12

@Rose - 再次?即使是苹果公司也非常沮丧:

来自Apple Doc:

视图控制器通常不应从全局对象(例如应用程序委托)检索上下文 - 这会使应用程序体系结构变得僵硬.视图控制器也不应为自己的用途创建上下文(除非它是嵌套的上下文).这可能意味着使用控制器上下文执行的操作未在其他上下文中注册,因此不同的视图控制器将对数据具有不同的视角.

推荐方式:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想将视图控制器传递给托管对象上下文并且它在applicationDidFinishLaunching附近怎么办?它只在我的应用程序的其他地方创建了5个级别. (2认同)

小智 11

我不知道这是否是你需要的,但它可能有所帮助:
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];