我有一个简单的 iphone 项目,其中包含一个简单的 xcdatamodel,它有一个具有大约 3 个属性的单个实体..
我想知道是否有办法以编程方式将属性添加到实体..即如果用户按下某种“添加”按钮,则会将一个简单的字符串属性添加到实体并保存..
如果这是不可能的,有人可以指出我正确的方向..
我有一个简单的 iphone 项目,其中包含一个简单的 xcdatamodel,它有一个具有大约 3 个属性的单个实体..
我想知道是否有办法以编程方式将属性添加到实体..即如果用户按下某种“添加”按钮,则会将一个简单的字符串属性添加到实体并保存..
如果这是不可能的,有人可以指出我正确的方向..
您可以以编程方式更改实体,但不能在将托管对象模型分配给托管对象上下文后对其进行更改,从而使其对任何用户定义的更改都无用。在任何情况下,您都不希望以编程方式添加实体,因为这会使您之前创建的持久性存储文件无用。
如果您想创建一个形式更自由、用户可扩展的数据模型,您必须退出并通过将可选关系添加到可以对其他数据建模的另一个实体或实体继承组来使您的实体更加灵活。
例如:假设您有一个联系人列表,并且您想为每个联系人添加自由表单字段。你会像这样设置你的实体。
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
。
我不太确定您是否可以使用代码添加属性,但也许您可以考虑使用一对多关系?