我想知道为什么我的managedObjectContext是nil(在我的TableViewController类中),当我像app 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");
}
在控制台中,我可以看到"已保存"输出,但是当我在我的类中记录managedObjectContext时它是nil ..
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = app.managedObjectContext;
解决了问题,但我仍然想知道为什么以前的解决方案不起作用?
答案 0 :(得分:1)
原因是您在代码中创建的视图控制器很可能实际上被故事板直接发送的视图控制器覆盖。没有充分的理由在应用程序委托中从故事板创建导航和视图控制器。
所以你的解决方案是正确的,并且让视图控制器从单例或app委托获取其上下文也很常见。保持这种模式,不要再担心另一个问题了。