将 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