以编程方式创建属性 - 核心数据

时间:2011-04-04 09:07:02

标签: iphone cocoa-touch core-data xcdatamodel

我有一个简单的iphone项目,其中包含一个简单的xcdatamodel,它有一个实体 大约有3个属性..

我想知道是否有一种方法可以以编程方式将属性添加到实体中。 即如果用户按下某种“添加”按钮,则会向实体添加一个简单的字符串属性并保存。

如果无法做到这一点,有人会指出我正确的方向..

2 个答案:

答案 0 :(得分:5)

您可以通过编程方式更改实体,但在将托管对象模型分配给托管对象上下文后,您无法更改托管对象模型,这样就无法对任何用户定义的更改进行更改。在任何情况下,您都不希望以编程方式添加实体,因为这会使您先前创建的持久存储文件无效。

如果要创建更自由格式的用户可扩展数据模型,则必须通过向可以为其他数据建模的另一个实体或实体继承组添加可选关系来退出并使您的实体更加灵活。

例如:假设您有一个联系人列表,并且您想要为每个联系人添加自由表单字段。您可以像这样设置您的实体。

Contact{
    name:string
    phone:string
    userDefinedFields<-->>UserDefined.contact
}

UserDefined{
    name:string
    contact<<-->Contact.userDefinedFields
}

每当用户添加新字段时,您都会创建一个新的UserDefined对象并将其添加为Contact.userDefinedFeilds关系。你可以根据需要充实。如果您需要多种类型的用户定义字段,则应将其设置为:

Contact{
    name:string
    phone:string
    userDefinedFields<-->>UserDefined.contact
}

UserDefined{
    name:string
    contact<<-->Contact.userDefinedFields
}

TextField:UserDefined{
    text:string
}

NumberField:UserDefined{
    numValue:Number
}

然后,您可以根据需要将TextField或NumberField对象放入Contact.userDefinedFields

答案 1 :(得分:1)

我不确定你是否可以添加带代码的属性,但也许你可以考虑使用一对多的关系?