将Core Data添加到应用程序时出现NSInternalInconsistencyException

时间:2012-10-14 06:02:41

标签: ios core-data

我正在将Core Data添加到现有应用程序中,我遵循以下步骤:

  • 导入框架

  • 创建模型

除了设置堆栈外,我还使用以下代码:

- (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] retain];

    return managedObjectModel;
}

-(NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"xxxxx.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
       // Handle error
    }    

    return persistentStoreCoordinator;
}

- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

但是当我试图保存数据时,我得到以下的执行

  

由于未捕获的异常而终止应用   NSInternalInconsistencyException,原因:'这   NSPersistentStoreCoordinator没有持久存储。这不可以   执行保存操作。'

1 个答案:

答案 0 :(得分:4)

这个问题可能与您运行应用程序然后更改了模型有关。

最简单的解决方案是从模拟器/设备中删除应用程序,然后执行清理,然后再次尝试。

更正确的解决方案是按I keep on getting "save operation failure" after any change on my XCode Data Model中的建议处理轻度迁移。

一个简单的建议是按照XCode4 and Core Data: How to enable SQL Debugging中的建议启用核心数据日志,看看底层是什么。

希望有所帮助。