2011-12-19 51 views
1

我有两个选项卡。选项卡1和Tab2。如何将managedObjectContext传递给我的第二个选项卡中的tablecontroller?

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

我需要将我的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; 

回答

1

暴露在你的应用程序代理相关的核心数据对象

@property(nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; 
@property(nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; 
@property(nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

在你FirstViewController和SecondViewController那么你访问MOC(和其他的东西,如果你需要)如上(马尔科的答案),除了MOD显示两个....

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

谢谢,但显然这不是这样做的“好方法”。这就是为什么即时通讯试图从第一个视图控制器 – Ayrad 2011-12-19 15:47:55

+0

传递它,但它是有意义的,让我的上下文某处可以访问,而不是通过 – Ayrad 2011-12-19 15:54:03

+0

-1不遵守苹果的建议 – MrJD 2012-04-27 05:11:14

1

尝试另一种方式圆:如果managedObjectController维持在应用程序的委托,你可以从任何地方得到它与下面的调用您的应用程序(替换无论你的委托被称为“MyAppDelegate”):

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

这是一个坏主意,因为它使得测试变得非常困难并且让你的设计变得更加严格 – 2011-12-19 15:39:07

+0

这对于只涉及一个托管对象上下文的应用程序来说很好。你会建议什么? – Jim 2011-12-19 15:46:43

+0

我总是发现相反的情况,即所有的核心数据对象都在一个地方。尽管我会反驳说,绝大多数应用程序在整个应用程序的运行周期中只使用一个moc,但我可以看到僵化的论点。它如何使测试变得困难? – Damo 2011-12-19 15:48:33

1

我认为你是在正确的轨道上。如果你想让它自己轻松一点,你可以确保你洽与您的命名(你现在是),并使用类似

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

这将允许你添加/删除和重新排序选项卡没有事情打断你。这是利用惯例而不是配置。

+0

有趣。因此,这将遍历所有不同的选项卡,并设置managedobjectcontext,如果它存在..但由于我感兴趣的选项卡是在导航控制器和tabcontroller下,我不认为这个循环将访问它。 – Ayrad 2011-12-19 16:03:43

+0

您是在代码或界面构建器中创建Tabbar吗? – 2011-12-19 16:09:24

+0

一切都是使用故事板和ios 5 sdk xcode 4.2创建的 – Ayrad 2011-12-19 16:20:56

相关问题