1

我们的应用程序使用 MagicalRecord 将数据存储在 Core Data 中。到目前为止它运行良好,但现在,在我的表中添加字段后,应用程序崩溃,但仅在发布版本中。

当我通过电缆升级时,它工作得很好,但是当我使用 Ad-Hoc (Enterprise) 分发来升级应用程序时,应用程序崩溃了。

问题是我没有得到任何关于崩溃的调试数据,因为这个。我唯一得到的是“信号 11 异常退出:分段错误:11”错误。

崩溃报告:(http://pastebin.com/64c4jvgJ

我认为这个问题可能与需要迁移有关,但我找不到任何关于它应该如何工作的好的文档。欢迎任何指向正确方向的指针。

更新:更多信息 - 在更新我的数据模型之前,我有一个名为 PAM.sqlite 的存储,以及一个名为 PAM.xcdatamodeld 的非版本化存储。现在我有一个版本化的商店,叫做 PAM & PAM 2。

我使用此代码尝试自动迁移,但它不起作用:

[MagicalRecord setDefaultModelNamed:@"PAM 2.xcdatamodel"];
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"PAM.sqlite"];
4

3 回答 3

2

您需要指定数据模型的扩展名(例如MyProjectDB.momd

所以,代码语法是:

  [MagicalRecord setDefaultModelNamed:@"MyProjectDB.momd"];

在这里找到了答案

于 2015-09-25T09:47:06.613 回答
0

iOS 的 MagicalRecord 的默认设置(https://github.com/magicalpanda/MagicalRecord)是这样的

#ifdef DEBUG
[self setShouldDeleteStoreOnModelMismatch:YES];
#else
[self setShouldDeleteStoreOnModelMismatch:NO];
#endif 

这意味着,如果在 DEBUG 模式下数据库模型发生变化,他们将简单地删除旧版本的数据模型。我相信这已经在最新版本的 Magical record 中得到修复。

如果不是,请将其更改为

#ifdef DEBUG
[self setShouldDeleteStoreOnModelMismatch:NO];
#else
[self setShouldDeleteStoreOnModelMismatch:NO];
#endif 

并修复迁移代码

于 2014-06-04T05:15:45.863 回答
0

我遇到过同样的问题。尝试在 xcdatamodeld 中添加新版本。然后将其激活为当前。在查找器中打开它。选择显示包内容。您将看到两个版本的两个文件。用旧版本中的非版本化文件替换旧版本。用这个

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"PAM.sqlite"];

所以你的项目会有两个版本的 db. 并且将具有自动迁移的能力。

于 2014-04-22T13:16:40.180 回答