2012-02-13 71 views
1

我有一个使用核心数据的项目,每当我需要对我的模型进行小改动时,我都会执行迁移。但是,在过去的一周中,我不得不对模型进行彻底检查,并且反应了我无法迁移任何数据的方式。iOS避免使用旧的核心数据模型

有了这个,我想知道是否有方法检查我在设备中具有哪个版本的模型,并且可能通过代码删除它,并从头开始完全创建一个新模型。这可能不是最受欢迎的方式,但如果任何人有更好的解决方案,我都会接受建议。

回答

4

两个合理的选择:

  • 使用NSManagedObjectModel一贯的版本mechansim。撞上新模型的版本。 Core Data会在打开商店之前自动检查给定商店是否与应用程序中的某个模型兼容;如果没有,当你尝试添加它时会给你一个错误。因此,如果您未在应用中提供旧型号,Core Data将不会使用任何旧商店。您可以通过删除商店来回应错误。您也可以在使用-isConfiguration:compatibleWithStoreMetadata:添加之前检查商店。有关更多信息,请参阅Initiating the Migration Process

  • 对使用​​新模型创建的任何商店使用不同的名称。 iOS应用程序仅使用一个或两个具有特定名称的商店并不罕见。您可能知道您在以前版本的应用中用于商店的名称;切换到不同的名称可让您轻松了解商店是否与旧型号或新型号兼容。

+0

我该如何去使用第一个选项?我看看设备是否包含包含特定版本ID的核心数据sqlite文件? – Seb 2012-02-13 23:14:52

+0

抱歉不清楚 - 我很快写了这个答案的第一个版本。我已经改变了答案,试图更清楚地解释。希望能帮助到你。 – Caleb 2012-02-13 23:45:22

+0

感谢您的回答。现在对我来说更清楚了,而且更有意义。 – Seb 2012-02-14 01:10:46

0

如果您更改了属性,以便新模型中不存在某些旧属性,请尝试使用respondsToSelctor:方法来检查实体是否响应旧选择器。如果是这样,你有旧的模型。