如何在第二个选项卡中将managedObjectContext传递给tablecontroller?

时间:2011-12-19 15:20:31

标签: iphone ios core-data

我有两个标签。标签1和标签2。

在tab2中,我有一个显示表格的表格视图控制器。表视图控制器位于navigationcontroller内。我正在使用故事板。

我需要将managedObjectContext传递给第二个选项卡,以便我可以在表格中显示数据。

这是我到目前为止所做的,但似乎很僵硬。如何在不从委托中获取上下文的情况下传递上下文?到目前为止,我有这个,但如果我理解正确,我需要将上下文从fcv传递给svc而不是直接传递给委托。

FirstViewController *fvc = (FirstViewController *)[tabBarController.viewControllers objectAtIndex:0];

SecondViewController *svc = (SecondViewController *)[tabBarController.viewControllers objectAtIndex:1];

fvc.managedObjectContext = self.managedObjectContext;
svc.managedObjectContext = self.managedObjectContext;

3 个答案:

答案 0 :(得分:1)

尝试相反的方法:如果在app delegate中维护了managedObjectController,您可以通过以下调用从应用程序的任何位置获取它(将“MyAppDelegate”替换为您调用的委托):

[(MyAppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectController];

答案 1 :(得分:1)

在您的app delegate

中公开相关的核心数据对象
@property(nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property(nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property(nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

在你的FirstViewController和SecondViewController中,你可以访问moc(以及其他东西,如果你需要),如上所述(Marko的答案),除了显示mod ....

[(MyAppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];

答案 2 :(得分:1)

我认为你走在正确的轨道上。如果你想让自己变得更容易一些,你可以确保你的命名(你现在的命名)是一致的,并使用像

这样的东西
for (id controller in tabBarController.viewControllers) {
    if ([controller respondsToSelector:@selector(setManagedObjectContext:)]) {
        [controller performSelector:@selector(setManagedObjectContext:) withObject:self.managedObjectContext];
    }
}

这将允许您添加/删除和重新排序选项卡,而不会破坏您。这是利用约定优于配置。