1

我无法使用任何官方 Xcode 工具来追踪这一点。

我不是想解决任何特定的问题。我想知道,为了更深入地了解,从 CoreData+sqllite 的角度来看,当用户错过更新并更新未来版本时会发生什么。

我的意思是安装了应用程序 1.0,然后发布了 1.1,并更改了其 xcdatamodel,但出于任何原因,用户没有更新它。然后几天(或几周)后,1.2 发布,其 xcdatamodel 发生了变化,用户更新了应用程序。或者最糟糕的是,他只更新了 1.x 版本。同时,该应用程序尚未从设备中删除,因此文档文件夹仍然存在。

我的理解是:更新应用程序时,启动时模型也会更新。仅仅因为 sqllite 数据库不能重命名列,加上其他限制,我想如果需要,创建一组新表并用旧数据填充,然后删除旧表。

那么,在 xcdatamodel 包含所有以前的版本的情况下,iOS 是遍历所有链直到最新版本逐步更新模型,还是足够聪明地直接跳转到最新版本?

4

2 回答 2

1

当使用 Core Data 运行一个新更新的应用程序时,iOS 将查看以前活动的 Core Data 模型和新的 Core Data 模型。它将根据其间的所有版本进行更改。如果两者之间没有版本,它只是做它通常做的事情。如果中间有版本(因为,就像你说的,用户跳过了应用程序更新),它会应用所有这些版本并根据这些版本进行更改。

所以,要真正回答你的问题:是的,系统足够聪明,可以做到这一点。只要您确保它可以从一个版本迁移到下一个版本(无论是轻量级还是使用映射模型),系统都会处理其余的。

于 2013-08-01T14:33:00.867 回答
-1

我假设您指的是 NSManagedObjectModel 版本控制。

这是一个无声的问题。当然,您也许可以跳到另一个版本,它可能会起作用。为什么不按照 API 文档中描述的版本顺序进行检查?

您可以解析核心数据托管对象模型文件,它是简单的 XML 并尝试操作它……但是为什么还要浪费时间在这样的事情上呢?它与“智能”的模型有什么关系=?

是的,你可以蒙着眼睛过马路而不会被汽车碾过。

于 2013-08-01T14:24:22.393 回答