ios - 托管对象上下文不是从 App Delegate 传递的

标签 ios objective-c core-data

我想知道为什么我的 managedObjectContext 是 nil(在我的 TableViewController 类中),当我像在应用程序委托(delegate)中那样传递它时:

 // Fetch Main Storyboard
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

    // Instantiate Root Navigation Controller
    UINavigationController *rootNavigationController = (UINavigationController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"rootNavigationController"];

    // Configure View Controller
    TableViewController  *viewController = (TableViewController *)[rootNavigationController topViewController];

    if ([viewController isKindOfClass:[TableViewController class]]) {
        [viewController setManagedObjectContext:self.managedObjectContext];
        NSLog(@"Saved");
    }

并且在控制台中我可以看到“已保存”输出,但是当我在我的类(class)中记录 managedObjectContext 时它为 nil..

AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    self.managedObjectContext = app.managedObjectContext;

确实解决了问题,但我还是想知道为什么以前的解决方案不起作用?

最佳答案

原因是您在代码中创建的 View Controller 很可能实际上被 Storyboard直接发送的 View Controller 覆盖了。没有充分的理由在应用委托(delegate)中像这样从 Storyboard创建导航和 View Controller 。

因此您的解决方案是正确的,并且让 View Controller 从单例或应用程序委托(delegate)获取其上下文也很常见。保持这种模式,不要再担心其他问题。

关于ios - 托管对象上下文不是从 App Delegate 传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121130/

相关文章:

ios - UIView 上的 UIStoryboard 约束

ios - 保持 uiview 突出显示(更改它的 alpha)直到另一个被点击

ios - UIImageView框架正确,contentMode正确,图像显示不正确

iphone - 锁定 ViewController 的方向

ios - UINavigationController 推送方法在动画完成之前加载下一个 VC 元素

iphone - 如何捕获 iPhone 应用程序中的其他应用程序事件?

ios - 从 firebase 数据库检索数据

objective-c - stringByReplacingOccurrence 不替换字符串

ios - 具有核心数据的表格 View 的奇怪行为

objective-c - CoreData逆向问题