我已经工作了一整天来解决我发现的一个NSInternalInconsistencyException错误。我得到的错误控制台消息是“此NSPersistentStoreCoordinator没有持久存储。它无法执行保存操作。”我还得到“执行被中断,原因: EXC_BAD_ACCESS (code=1,address=0x1)”。
我的App Delegate中有以下代码:
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
#pragma mark Core Data stack
- (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;
}
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"shindy.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;
}
#pragma mark Application's documents directory
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}我已经通读了其他类似的问题,看起来我的代码是一致的,我不应该有这个问题。然而我是..。
我已经尝试了清理和删除应用程序和重新安装。我在两个设备上都尝试了这个应用程序&在模拟器上。我将附加的URLPath的名称"shindy.sqlite“更改为以前从未使用过的其他名称。我还尝试在我的applicationDidFinishLaunching方法中强制实例化[self saveContext];,试图让我的应用程序创建商店。
我所有解决这个问题的尝试都返回了相同的错误。我不知道还能试什么。
发布于 2013-01-12 14:21:58
我最终找出了我做错了什么。不幸的是,这可能对你们中的大多数人没有太大帮助,因为这是我犯的一个愚蠢的错误。
我只是在App Delegate中正常地“追加”到URL上。然后在加载的第一个视图控制器中再次“追加”。这导致我的代码在已经创建的sqlite文件夹上附加了一个名称。
https://stackoverflow.com/questions/14287579
复制相似问题