如何从AppDelegate分配NSManagedObjectContext到基于TabBased应用程序的ViewControllers?

新手问题在这里。

由于XCode不提供基于核心数据的TabBased应用程序的项目模板,所以我必须从其他模板剪切和粘贴核心数据堆栈到我的基于TabBase的应用程序。

这是如何在Master-Detail应用程序模板中将NSManagedObjectContext对象从AppDelegate分配给MasterViewController

 // AppDelegate.m (Master-Detail template) - (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; } 

如何从AppDelegate分配NSManagedObjectContext到基于TabBased应用程序的ViewControllers?

如果标签栏控制器是根视图控制器,并且“主视图控制器”位于第一个选项卡上:

 UITabBarController *tbc = (UITabBarController *)self.window.rootViewController; MasterViewController *controller = (MasterViewController *)tbc.viewControllers[0]; controller.managedObjectContext = self.managedObjectContext; 

更新:如果第一个选项卡使用导航控制器,则只需插入一个步骤:

 UITabBarController *tbc = (UITabBarController *)self.window.rootViewController; UINavigationController *nc = tbc.viewControllers[0]; YourViewController controller = (YourViewController *)nc.topViewController; controller.managedObjectContext = self.managedObjectContext; 

在View Controller上创build一个属性:

 @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext 

然后说,比如你想为所有的视图控制器分配这个。 你可以通过循环UITabBarController的viewControllers来完成。

 UITabbarController *tabBarController = (UITabBarController *)self.window.rootViewController; for (UIViewController *viewController in tabBarController.viewControllers) { viewController.managedObjectContext = self.managedObjectContext }