将 managedObjectContext 发送到 viewController 崩溃
Posted
技术标签:
【中文标题】将 managedObjectContext 发送到 viewController 崩溃【英文标题】:Sending the managedObjectContext to viewController crashes 【发布时间】:2013-12-18 08:41:13 【问题描述】:我正在尝试通过 segue 将我的 managedObjectContext 从我的 masterViewController 发送到 anotherController,但我总是收到此错误:
-[UINavigationController setManagedObjectContext:]: unrecognized selector sent to instance 0x8d67c70
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setManagedObjectContext:]: unrecognized selector sent to instance 0x8d67c70'
我在 masterViewController 的 viewDidLoad()
中从我的 appDelegate 获取 managedObjectContext,如下所示:
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
self.managedObjectContext = appDelegate.managedObjectContext;
我想不出我做错了什么,请帮忙。
【问题讨论】:
在 masterViewController 中显示 managedObjectContext 的声明部分 您是否在主视图中声明了managedObjectContext
?
声明如下:@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
我也尝试了保留选项,但仍然没有。
MasterViewController 有 UINavigationController 的基础吗?属性 managedObjectContext 是否填写在其他任何地方?
为什么要在导航控制器上设置属性?
【参考方案1】:
我猜测具有 managedObjectContext 属性的视图控制器嵌入在导航控制器中。在 segue 方法中,确保获取对正确视图控制器的引用:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"MySegue"])
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
MyViewController *vc = (MyViewController *)navController.topViewController;
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
vc.managedObjectContext = appDelegate.managedObjectContext;
【讨论】:
非常感谢,成功了,我完全忘记了在 otherController 之前我有一个 navigationController。【参考方案2】:您在 UIAvigationController 上调用 setter 方法,该方法仅在您创建属性 managedObjectContext 时存在。所以你必须继承 UINavigationConroller,创建属性,然后你应该能够从另一个类中设置它。
【讨论】:
以上是关于将 managedObjectContext 发送到 viewController 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
将 NSManagedObject 重新插入到 ManagedObjectContext
将 managedObjectContext 传递给 UITabBarController 问题
如何将 ManagedObjectContext 与线程一起使用
将 ManagedObjectContext 传递/注入到视图控制器中
如何将 ManagedObjectContext 快速传递给根视图控制器
将 UITabBarController 与内部 UINavigationControllers 一起使用时如何共享 ManagedObjectContext