我的应用程序使用由核心数据管理的sqlite数据库。这些是我在调试文件中发现的错误。在模拟器上它工作得很好,没有任何问题。在Xcode 4.2 iOS 5中制作了应用程序并在iPhone 4 4.2.1上进行了尝试。
Incident Identifier: 65E195D6-C583-4CA2-8017-1AEC56FAFBD4
CrashReporter Key: 4ebf8de224465a40c94ea40cffb742f345888ef0
Hardware Model: iPhone3,1
Process: Jobs [158]
Path: /Applications/Jobs.app/Jobs
Identifier: Jobs
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: punchd [1]
Date/Time: 2011-12-01 13:53:22.288 +0000
OS Version: iPhone OS 4.2.1 (8C148)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
4 Jobs 0x00002c74 0x1000 + 7284
5 Jobs 0x00002a0a 0x1000 + 6666
6 Jobs 0x00003012 0x1000 + 8210
36 Jobs 0x0000283c 0x1000 + 6204
37 Jobs 0x000027f4 0x1000 + 6132
错误4导致这行代码:
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort(); //this one to be exact
}
错误5导致这行代码:
- (NSManagedObjectContext *)managedObjectContext
{ if (__managedObjectContext != nil)
{ return __managedObjectContext; }
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; //this line with error;
if (coordinator != nil)
{ __managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator]; }
return __managedObjectContext;}
这些是在app代理中。 现在第6个错误来自主视图,在ViewDidLoad:
中 if (managedObjectContext == nil)
{
managedObjectContext = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; //this line;
NSLog(@" %@", managedObjectContext);}
回应评论中的要求:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyDatabase.sqlite"];
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
...
此外:
- (NSURL *)applicationDocumentsDirectory {
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
答案 0 :(得分:3)
你的应用程序没有崩溃,它在你abort
中指示它时正在中止,因为这行代码返回YES,因为它没有成功添加了PersistentStoreWithType,因为您正在测试if(!
:
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
能够解决这个问题的一个很好的起点是向我们展示分配/定义storeURL
,options
和error
的代码。最有可能的是,其中一个不存在或尚未正确初始化。