好的,我试图一遍又一遍地解决这个问题。
我知道最佳做法是让App Delegate将托管对象上下文传递给应用程序中的第一个视图控制器,然后让每个后续视图控制器传递托管对象上下文。但是,当我在我的应用程序中使用标签栏控制器时,我似乎可以绕过那个额外的层。
我能够弄清楚如何做到这一点的唯一方法是让每个标签“Reach Back”的根视图控制器进入app委托以获取上下文,但据我所知,这是糟糕的形式。
答案 0 :(得分:2)
您可以使用界面构建器来实现相同的功能。
这是Rog原始建议的略微修改(为了一些额外的清晰度)版本 - 请注意IBOutlet的
@interface AppDelegate : NSObject <UIApplicationDelegate> {
ViewController1 *vc1;
ViewController2 *vc2;
ViewController3 *vc3;
}
@property (nonatomic, retain) IBOutlet ViewController1 *vc1;
@property (nonatomic, retain) IBOutlet ViewController2 *vc2;
@property (nonatomic, retain) IBOutlet ViewController3 *vc2;
然后在实施文件中:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
vc1.managedObjectContext = self.managedObjectContext;
vc2.managedObjectContext = self.managedObjectContext;
vc3.managedObjectContext = self.managedObjectContext;
// Continue with your implementation logic
}
然后在Interface Builder中,从App Delegate拖动到嵌套在Tab Bar Controller中的View Controller,并从出现的上下文菜单中连接相关的View控制器。
答案 1 :(得分:1)
最后,关键是不要依赖界面构建器来构建标签栏控制器。通过在代码中手动执行,我可以轻松地将托管对象上下文传递给视图控制器,因为我在applicatoinDidFinishLaunchingWithOptions中创建它们:
我使用这篇文章作为我的基础:http://www.iphonelife.co.uk/creating-a-uitabbarcontroller-programmatically/
答案 2 :(得分:1)
您也可以在AppDelegate中执行类似的操作:
CoreDataUsingViewController *vc = (CoreDataUsingViewController *)[[tabBarController viewControllers] objectAtIndex:1];
vc.managedObjectContext = self.managedObjectContext;
我将coreData添加到具有几个不同构建目标的现有项目中,并且不想从头开始重新创建所有不同的UITabBarControllers。这样做很容易,但我不确定这是否是最巧妙的方式。
How to share a ManagedObjectContext when using UITabBarController
答案 3 :(得分:0)
不确定我是否正确理解了您的问题,但为什么不以同样的方式将MOC传递给其他视图控制器?这是一个例子:
@interface AppDelegate : NSObject <UIApplicationDelegate> {
ViewController1 *vc1;
ViewController2 *vc2;
ViewController3 *vc3;
}
// Declare properties as per normal
然后在实施文件中:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
vc1.managedObjectContext = self.managedObjectContext;
vc2.managedObjectContext = self.managedObjectContext;
vc3.managedObjectContext = self.managedObjectContext;
// Continue with your implementation logic
}
我希望它有所帮助! ROG