我在玩,学习 CoreData,当我得到一个以 UITableView 作为根的测试应用程序时,它可以很好地显示数据。这会告诉我它从中提取数据的数据库设置正确。
现在我试图将 UIViewController 作为初始视图控制器(通过故事板),它一直给我这个错误 -
无法使用 nil 模型创建 NSPersistentStoreCoordinator
现在我已经阅读了很多论坛和教程,他们基本上都说我需要确保我的 xcdatamodel 文件与此匹配
URLForResource:@"Model" withExtension:@"momd"]
确实如此,如果 UITableView 是根视图,我可以再次显示数据。
现在如果我改变:
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
进入这个:
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
//NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; // I have commented out this line because the NSURL is no longer being used.
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return __managedObjectModel;
}
应用程序运行但 TableView 是空的,这对我来说很有意义,因为我没有链接到 CoreData 文件。- 问题是 - 我如何使用我所拥有的设置运行应用程序并显示数据?
干杯杰夫
@response 对 Jeff Wolski 的第一个回答
感谢您的回答,我认为我走在正确的道路上 - 我不得不对我的项目稍作改动以消除错误。我知道有
AppDelegate appDelegate = (AppDelegate) [[UIApplication sharedApplication] delegate];
所以我把这是
- (NSManagedObjectModel *)managedObjectModel {
面积——对吗?它现在也提出了 appDelegate 变量未使用警告。可能是一个简单的问题,但我现在在哪里使用该变量?干杯杰夫
在@Jody Hagins 之后,我已经发布了我认为你的样子 - 希望它有所帮助:-)
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ViewToNav.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
干杯杰夫