n核心数据,我创建模型,然后生成NSManagedObjectContext子类,但我的实体表永远不会在SQLlite数据库中创建。我必须手工完成吗?
我的应用程序崩溃在这一行的主线程上:
// Save the data in core data
UsersTest *coreDataUser =[NSEntityDescription insertNewObjectForEntityForName:@"UsersTest" inManagedObjectContext:self.managedObjectContext];
UsersTest实体是在XCode中创建的,我将UsersTest.h添加到我的控制器中。
是什么给出的?这是一个错误吗?我在上下文中断言我们也在主线程中。
我得到了这个例外:
NSException * name:@"NSInternalInconsistencyException" reason:@"+entityForName: could not locate an entity named 'UsersTest' in this model." 0x0895ee20
我是否必须打开数据库或其他任何内容(请点击此链接:http://www.codigator.com/tutorials/ios-core-data-tutorial-with-example/)
谢谢,真的卡住了。
我的appDelegate.m是这样的:
// 1
- (NSManagedObjectContext *) managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return _managedObjectContext;
}
//2
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managedObjectModel;
}
//3
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"PhoneBook.sqlite"]];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if(![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeUrl options:nil error:&error]) {
/*Error for store creation should be handled in here*/
}
return _persistentStoreCoordinator;
}
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
答案 0 :(得分:0)
确保将名称大小与核心数据模型中显示的名称完全相同。您可能还想检查managedObjectContext是否为nil。
答案 1 :(得分:0)
在执行任何操作之前,您可能希望创建基于Master-Detail应用程序的新项目。它将配置Core Data的所有必需组件,并在AppDelegate.m文件中进行设置。
至少创建一个Master-Detail Application项目并确保项目中的AppDelegate以与Master-Detail Application项目相同的方式配置Core Data。这是开始使用Core Data的好方法。
否则请花点时间阅读:
有时很难调试核心数据。关于Core Data的Apple文档至少可以说是彻底的。你可能会发现你哪里出错了。
修改1:
确保您的NSManagedObjectContext不是nil。如果是这样,您还将获得持久存储协调器未找到错误。
答案 2 :(得分:0)
您当前的堆栈看起来很好。如果您在任何时候更改了模型,则磁盘sqlite文件可能无效。
确保完全清理项目(Cmd-Shift-Alt-K)并为每次编辑CoreData模型重置模拟器(iOS模拟器>重置内容和设置...)。 / p>
每次更改模型时,磁盘上现有的sqlite文件都将与模型不兼容,从而变得不可读且不可写。
CoreData文件是upgradable,但仅限于某些方式,在进行初始开发时,最简单的升级方法是将所有内容分段并重新开始。