UIManagedDocument的迁移问题

时间:2012-03-19 13:24:13

标签: core-data core-data-migration uimanageddocument

我开始在我的应用程序中使用CoreData,遵循斯坦福CS193P关于使用iOS 5的新类UIManagedDocument的课程。方法本身非常简单,但我无法理解如何处理我一直在制作的模型修改。这是我实例化我的UIManagedDocument对象的方法(在appDelegate中,以便其他所有类都可以使用它):

if (!self.database) {
    NSURL *url=[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"AppName"];

    UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    doc.persistentStoreOptions = options;
    self.database=doc;
    [doc release];
}

我遇到的问题是每次更改我的.xcdatamodel时,我都无法获取以前存储在文档中的所有内容以及创建任何新实例。事实上,这样做会产生以下异常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores.  It cannot perform a save operation.'

我认为设置托管文档的“选项”属性可以解决问题,但显然这还不够。 有人可以帮忙吗?无法找到真正符合我的确切需求的其他问题。

3 个答案:

答案 0 :(得分:2)

在修改Core Data模型之前,您应该“添加模型版本”。

1。 选择原始模型文件。 (例如YourProject.xcdatamodel)

2。 “编辑” - > “添加模型版本......”。然后添加新的模型版本(例如2.0)

3。 您将获得一个新的模型文件。 (例如YourProject 2.0.xcdatamodel)。修改它。

4。 更改当前的型号版本。选择顶部.xcdtatmodel文件 - > “查看” - > “公用事业” - > “显示文件检查器”。找到“Versioned Core Data Model”标签,然后选择您要修改的版本。

这也让我很长时间不安。希望这种方式可以帮助你^^

答案 1 :(得分:0)

您的问题有一个非常简单的解决方案。只需从模拟器或设备中删除应用程序(触摸应用程序图标几秒钟,然后触摸应用程序图标开始摆动时出现的十字架)。这样,Xcode就会更新您应用的UIManagedDocument。

答案 2 :(得分:0)

确保您没有将NSDocumentDirectory错误输入为NSDocumentationDirectory。

   NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

NSDocumentDirectory是对的!