私は、およそ3つの属性を持つ単一のエンティティを持つ単純なxcdatamodelを含む単純なiphoneプロジェクトを持っています。
プログラムでエンティティに属性を追加する方法があるかどうかを知りたいです。つまり、ユーザーが何らかの「追加」ボタンを押すと、単純な文字列属性がエンティティに追加されて保存されます。
これが不可能な場合、誰かが私を正しい方向に向けることができます。
私は、およそ3つの属性を持つ単一のエンティティを持つ単純なxcdatamodelを含む単純なiphoneプロジェクトを持っています。
プログラムでエンティティに属性を追加する方法があるかどうかを知りたいです。つまり、ユーザーが何らかの「追加」ボタンを押すと、単純な文字列属性がエンティティに追加されて保存されます。
これが不可能な場合、誰かが私を正しい方向に向けることができます。
プログラムでエンティティを変更することはできますが、管理対象オブジェクトコンテキストに割り当てられた後は、管理対象オブジェクトモデルを変更できないため、ユーザー定義の変更には使用できません。いずれにせよ、以前に作成した永続ストアファイルが役に立たなくなるため、プログラムでエンティティを追加することは望ましくありません。
より自由な形式のユーザー拡張可能なデータモデルを作成する場合は、追加のデータをモデル化できる別のエンティティまたはエンティティ継承グループにオプションの関係を追加して、エンティティをバックアウトし、より柔軟にする必要があります。
例:連絡先リストがあり、各連絡先に自由形式のフィールドを追加するとします。このようにエンティティを設定します。
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
ます。
i am not so sure if you can add an attribute with code, but maybe you can consider using one to many relationship?