我有两个标签。标签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;
答案 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];
}
}
这将允许您添加/删除和重新排序选项卡,而不会破坏您。这是利用约定优于配置。