1

私は、およそ3つの属性を持つ単一のエンティティを持つ単純なxcdatamodelを含む単純なiphoneプロジェクトを持っています。

プログラムでエンティティに属性を追加する方法があるかどうかを知りたいです。つまり、ユーザーが何らかの「追加」ボタンを押すと、単純な文字列属性がエンティティに追加されて保存されます。

これが不可能な場合、誰かが私を正しい方向に向けることができます。

4

2 に答える 2

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ます。

于 2011-04-04T21:42:42.660 に答える
1

i am not so sure if you can add an attribute with code, but maybe you can consider using one to many relationship?

于 2011-04-04T09:53:08.670 に答える