我想知道为什么我的 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/