如何动态更改Core Data实体列类型?

时间:2011-06-09 02:54:43

标签: iphone objective-c core-data

如何以编程方式更改Core Data实体列的type?例如,从StringInt 16。可以假定该实体为空(无数据行)。

2 个答案:

答案 0 :(得分:3)

首先,它不是SQL列,它是实体的属性。属性有行为,SQL中的列没有。

在回答您的问题时,一旦使用数据模型模型将数据写入持久存储文件(sqlite存储或其他格式),就无法以编程方式更改。如果更改属性,则需要执行版本迁移。

有关详细信息,请参阅:Core Data Model Versioning and Data Migration Programming Guide

一般性建议:核心数据不是SQL。实体不是表格。对象不是行。属性不是列。关系不是联接。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

答案 1 :(得分:2)

您可以在NSManagedObjectModel中操纵实体的属性(包括)类型,直到它用于初始化持久性存储协调器。因此,创建NSManagedObjectModel,改变属性(不是列)类型,然后像往常一样设置Core Data堆栈。

当然,如果您已经使用原始模型保留了任何数据,则必须执行schema migration将数据更新为新类型。