我读过的所有指南和教程都告诉我从应用代表那里做到这一点:
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
PictureViewController *picList = (PictureViewController *)[[navController viewControllers] lastObject];
picList.managedObjectContext = self.managedObjectContext;
但是,我的View Controller处于容器视图控制器和导航视图控制器的疯狂层次结构中。这也是从目标视图控制器执行此操作而没有任何令人讨厌的后果的可接受方式吗?
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = appDelegate.managedObjectContext;
答案 0 :(得分:1)
简而言之,是的。这两种方法都没问题。我已经看到人们直接从代理访问它的示例,而不是将其保存为视图控制器中的ivar。大多数情况和我的偏好都是按照你上面的做法进行的。
只要你尊重concurrency问题,你就可以了。