1. 从两个视图中使用相同 Core Data 上下文的最佳方式是什么?
我有一个带有两个 ViewController 的 TabBarController。首先我想记录一个时间,应该存储。在第二个有一个 TableView 显示所有记录。我按照教程中的说明进行操作,并在 App Delegate 中启动所有 ManagedDataContext 内容并将其传递给我的控制器:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
SecondViewController *tableController = [[SecondViewController alloc] init];
tableController.managedObjectContext = [self managedObjectContext];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:tableController];
[window addSubview: [self.navigationController view]];
[window makeKeyAndVisible];
}
但是当我多次使用这个变量时(也在同一个类中)我得到一个(某种空指针)错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Event''
在调试时,我发现这里的 managedObjectContext 为空:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
这里有什么问题?什么是视图的最佳解决方案?
可以使用单例吗?
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
NSLog(@"managedObjectContext already in use. Returning instance.");
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
NSLog(@"managedObjectContext nil. Returning new instance.");
return managedObjectContext;
}
2. 是否可以存储与数据模型不同的对象?
我需要我的班级不要存储我的其他对象。就像我不想保存的数组一样。这可能吗?