0

我整天都在努力解决一个我发现是错误的NSInternalInconsistencyException错误。我收到的错误控制台消息是“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。” 我还得到“执行被中断,原因:EXC_BAD_ACCESS(代码=1,地址=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”更改为我以前没有使用过的各种名称。[self saveContext];我还尝试在我的方法中强制实例化,applicationDidFinishLaunching以使我的应用程序创建商店。

我所有解决问题的尝试都只是返回了相同的错误。我不知道还能尝试什么。

4

1 回答 1

0

我最终弄清楚我做错了什么。不幸的是,它可能对你们大多数人没有多大帮助,因为这是我犯的一个愚蠢的错误。

我在 App Delegate 中的 URL 上进行了正常的“附加”。然后在将加载的第一个视图控制器中再次“附加”。这导致我的代码将名称附加到已创建的 sqlite 文件夹中。

于 2013-01-12T06:21:57.933 回答