- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
长话短说,我的 Core Data 模式被更改,我的应用程序被提交到应用程序商店,这导致所有更新应用程序的人都崩溃了。崩溃是由于未正确迁移数据模型而导致缺少 NSPersistentStore
造成的。
我仍然在文档目录中看到 .sqlite 和关联的数据库文件,如果我降级到旧版本,所有数据都可以正常工作。我的问题是,我能否通过以某种方式迁移现有的 NSPersistentStore
并将其添加到 NSPersistentStoreCoordinator 来通过应用程序更新从中恢复?
编辑:所以我实际上并没有自己更改我的 xcdatamodel,因此,“长话短说”。但是,我确实从我的项目中删除了 XMPPFramework,我感觉这可能导致了核心数据问题。
编辑:
我没有直接对我的数据模型进行任何更改,但我已经查明了问题所在。我正在使用 [NSManagedObjectModel mergedModelFromBundles:nil]
检索我的 NSManagedObjectModel
,它合并了包中存在的所有数据模型。这包括 XMPPFramework 附带的所有数据模型,现在框架已被删除,传递到 [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel]
的 NSManagedObjectModel 是不同的,从而导致崩溃。
我通过使用 FMDB 获取现有数据库的内容解决了这个问题,然后创建了一个新的 sqlite 文件并将持久存储协调器指向该新的 sqlite 文件。然后我通过遍历现有数据并创建适当的 NSManagedObject
将所有现有数据插入到新数据库中。我也停止使用 mergedModelFromBundles
来检索我的数据模型,而是使用 initWithContentsOfURL
。
最佳答案
实际上,您可能在第一个版本之后以某种方式更新了 xcdatamodel,而您没有为第二个版本创建新的 xcdatamodel 模型。所以在第二次更新时它崩溃了。
注意:第一个版本发布后,您必须创建 xcdatamodel 的第二个模型版本。
创建 xcdatamodel 的第二个模型版本 -
1. 首先,您必须选择 Model.xcdatamodeld -> 转到菜单上的编辑器 -> 添加模型版本。在这里你必须命名一个模型版本,并根据你想要创建这个新模型的旧模型。
现在,无论您想进行什么更改,都应该在新模型版本 xcdatamodel 上进行。
2.你可以在图片上看到,我为我的新模型“Model2.0”命名了一个新名称,它基于我以前的“模型”。
新模型将与您的旧模型完全一样工作,此外,对新模型所做的更改不会影响您的旧模型。因此它不会在更新后使您的应用崩溃。
3. 您必须选择新的“Model2.0”作为默认工作模型。为此,请考虑下图。
4. 在这里您可以看到现在有 2 个模型。请选择“Model.xcdatamodeld”作为主模型,然后在右侧打开它的“文件检查器”——如上图所示。
5. 右侧有'Model Version'字段,表示该项目选择的'current' model。请为您的更新版本选择新模型“Model2.0”。现在你可以运行了,它会继续正常工作。
注意:请确保现在您要进行的任何更改都是在您的新模型“Model2.0”上进行的,因此它不会与您的旧模型发生冲突。如果您想在更新的应用程序版本上更改 xcdatamodel 的配置,则每次都必须创建新模型。
关于ios - 我没有在新版本中迁移 NSPersistentStore,我可以通过应用程序更新来恢复吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591807/
有什么方法可以恢复删除的元素吗? 这是我删除元素的代码 myFunction() { var width = window.innerWidth; var February = doc
我有一个 TokuDB 表,由于某种原因缺少 ***_status.tokudb 文件。 我还不确定文件是否由于 TokuDB 崩溃而丢失。 问题是: 有没有办法从主要文件和关键文件(我可以从 tok
我正在 Windows 7 (x86) 上运行带有 Workbench 6.3.8 的 32 位 MySQL Server 5.7.22 本地实例(必须选择 32 位版本 - 所以,较旧的版本)。 我
1、备份 <% SQL="backup database 数据库名 to disk='"&Serve
1、ASP中怎么实现SQL数据库备份、恢复! 答:asp在线备份sql server数据库: 1、备份 <% SQL="ba
我在 R 中使用 stats::filter 函数来理解 R 中的 ARIMA 模拟(如在函数 stats::arima.sim 中)和估计。我知道 stats::filter 将线性过滤器应用于向量
我已经浏览了示例应用程序的文档和代码,并发现 files/objectbox/objectbox/data.mdb 是存储所有数据的默认文件。 假设我的理解是正确的,我有几个问题找不到文档: 我想在我
为了恢复非续订订阅类型的 InAppPurchase,我已经实现了服务器来处理此问题。 但在购买过程中,iTunes 有时不会要求用户验证他们的卡详细信息, 在这种情况下,它会在后台发送应用程序并显示
我的问题是寻找cocos2d游戏期间暂停/恢复状态(包括所有需要保存的数据信息)的设计解决方案。 包括但不限于以下情况: 1).用户选择退出,然后弹出一个对话框供用户选择“直接退出”、“暂停”; 2)
在 Mercurial 中,我有一个旧的变更集,除了对单个文件的更改外,它都很好。我将如何恢复对该单个文件的更改? 即使只是能够在上一个变更集中查看文件的状态也会很好,然后我可以剪切和粘贴。 我的 M
我的一项职能遇到了困难。我想做的是计时器在页面加载后立即启动,并且只有一个带有启动/恢复的按钮。我无法在代码中找出需要更改功能的位置。有人可以帮助我吗?谢谢! HTML: , Javascr
我正在阅读Scrap your type classes 。这为类型类提供了替代方案。然而,我被Paul Chiusano的评论所困扰。其中讨论了恢复 do 表示法 语法。 坦白说,我无法理解 ret
当 OrientDB 因某人重新启动机器而非正常关闭时,OrientDB 最终会处于数据恢复失败的状态。对于如何从这种不正常的关闭中正常恢复有什么建议吗?我们正在寻找系统在断电期间能够自行恢复的方法。
我正在构建一个 Electron 应用程序,如果发生崩溃,它必须重新加载渲染进程窗口。 目前我可以从主进程重新启动应用程序 app.relaunch(); app.quit(); 但我无法检测到窗口崩
我有 3 个 Activity ,比如说 MainActivity、 Activity 2 和 Activity 3。 在 MainActivity 中,我有一个按钮(开始/停止),当我单击此按钮时,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
Twilio 是否支持暂停和恢复内容播放。换句话说,我有相当长的文件将播放给调用者,并且我正在尝试找到一种方法来实现暂停和恢复功能。在播放某些内容的过程中,我希望用户能够按数字暂停,然后再次按数字从音
我已经提交了 A、B、C、D 和 E。我意识到在提交 B 中发生了一些非常糟糕的事情,所以我想回到 A,这次正确地进行之前搞砸了 B 的更改,然后重新应用 C 、 D 和 E 自动。 您可能想知道为什
我的一个文件被“标记为文本”,图标也发生了变化。实际上这是一个 PHP 文件。我尝试过使用 Help -> Find Action -> Mark As 尝试将其恢复为 PHP 突出显示,但它不起作用
我有一些 SSE 程序,可以将循环中的内存归零,当指针未对齐时,它会引发 SIGSEGV进入我的处理程序。我可以在此类处理程序中获取更多信息吗例行公事,现在我不知道它是在哪里完成的,我也可以吗以某种可
我是一名优秀的程序员,十分优秀!