首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIManagedDocument的迁移问题

UIManagedDocument的迁移问题
EN

Stack Overflow用户
提问于 2012-03-19 21:24:13
回答 3查看 1.9K关注 0票数 6

在斯坦福大学上了关于使用iOS 5的新类UIManagedDocument的CS193P课程后,我开始在我的应用程序中使用CoreData。这种方法本身非常简单,但我不能理解如何处理我一直在进行的模型修改。这就是我实例化UIManagedDocument对象的方式(在appDelegate中,以便每个其他类都可以使用它):

代码语言:javascript
复制
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稍作更改,都无法获取以前存储在文档中的所有内容,也无法创建任何新实例。事实上,这样做会产生以下异常:

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores.  It cannot perform a save operation.'

我以为设置托管文档的"options“属性就可以解决这个问题,但显然这还不够。有人能帮上忙吗?找不到其他真正符合我的需求的问题。

EN

回答 3

Stack Overflow用户

发布于 2012-04-02 15:23:17

在修改核心数据模型之前,您应该“添加模型版本”。

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

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

  1. 你会得到一个新的模型文件。(例如YourProject 2.0.xcdatamodel)。修改它。

  1. 更改当前模型版本。选择顶部的.xcdtatmodel文件->“查看”->“实用程序”->“显示文件检查器”。找到“版本化核心数据模型”标签,然后选择要修改的正确版本。

它也困扰了我很长很长一段时间。希望这种方式能帮助你^^

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 01:56:31

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

票数 0
EN

Stack Overflow用户

发布于 2013-07-18 05:21:57

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

代码语言:javascript
复制
   NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

NSDocumentDirectory是对的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9771005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档