如何从AppDelegate将NSManagedObjectContext分配给TabBased应用程序中的ViewControllers?

时间:2013-09-02 08:23:30

标签: ios objective-c core-data

这里有新手的问题。

由于XCode不为带有Core Data的TabBased应用程序提供项目模板,因此我必须将Core Data堆栈从其他模板切割并粘贴到我的TabBased应用程序。

这是在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;
}

如何从NSManagedObjectContextAppDelegate分配给基于TabBased的应用程序中的ViewControllers?

2 个答案:

答案 0 :(得分:1)

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

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;

答案 1 :(得分:0)

在View Controller上创建一个属性:

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext

然后说,例如,您想为所有视图控制器分配它。您可以通过循环遍历UITabBarController的viewControllers来完成它。

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