我正在尝试构建我的第一个 Core Data 应用程序,但是当应用程序崩溃并出现以下错误时,我在启动时遇到了问题:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an entity named 'Launchpad' in this model.'
*** First throw call stack:
(0x15b7012 0x13dce7e 0x6f4c5 0x3e0f 0x3c64 0xee05c8 0xe4802a 0xe15d23 0xe15a34 0xea2301 0x21ba53f 0x21cc014 0x21bc7d5 0x155daf5 0x155cf44 0x155ce1b 0x24037e3 0x2403668 0x32465c 0x2abd 0x29e5 0x1)
libc++abi.dylib: terminate called throwing an exception
我一直在研究这个错误,我收集了通常是因为我没有正确配置managedObjectModel
错误,但我不确定如何在我自己的代码中发现这样的错误。
我的 中有以下三个功能AppDelegate
:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Orbiter" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Orbiter.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
在我未经训练的眼睛看来,我的核心数据对象似乎已正确配置。
我在我的xcdatamodeld
文件中添加了一个名为 Launchpad 的实体,并将其连接到对应的类,该类Launchpad
派生自NSManagedObject
.
导致崩溃的代码片段是
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *launchpad = [NSEntityDescription insertNewObjectForEntityForName:@"Launchpad" inManagedObjectContext:context];
最后一行是事情偏离轨道的地方。
我环顾四周,我发现的所有帮助都表明我添加了我已经拥有的功能AppDelegate
,所以我真的不知道从这里去哪里。