0

Core Data は初めてで、xCode プロジェクトのこの部分で行き詰まりました。

コア データ エンティティ「Person」を作成しました。このエンティティには次の属性があります。

  • 名前;
  • 年;
  • 誕生日;
  • 住所;

この属性はテーブルビューに表示されています。ここまでは順調ですね。

私の問題は、テーブルに「フィールドの追加」または「行の追加」セルを持たせたいので、ユーザーがこれらの既に作成された属性に加えてさらに情報を追加したい場合は、セルをクリックしてフィールド名とタイプを選択するだけです。

たとえば、テーブルの詳細ビューでその人の「電話番号」が必要な場合、新しいフィールドに「電話番号」という名前を付け、そのタイプ「番号」を選択します。次に、その人の電話番号を追加できる追加のフィールドがあります。

コアデータでこれを行うにはどうすればよいですか? ユーザーがエンティティに新しい属性を手動で追加し、その形式を選択する方法はありますか? 最善のアプローチは何ですか?ありがとう。

4

3 に答える 3

1

Core Data を使用して、思いどおりのことを行うことはできません。デザインの新しいバージョンを作成する場合を除き、Core Data は構造を変更できませんが、xcode でそれを行います。

ただし、f.ex という別のテーブルを簡単に追加できます。個人の単一の接続にリンクし、情報テーブルに多くのリンクを返す個人を持っています。

このようにして、必要な数のフィールドと値を追加できます。もちろん、追加するすべての余分なフィールドは同じ人に従うので、cellPhone フィールドを使用する場合は、それをすべてに追加する必要があります。

ダイレクト SQL を使用し、Core Data を使用しないことをお勧めします。Core Data はデータベースではなく、オブジェクト ストアであり、iOS 開発に慣れると、最初に考えていたよりもはるかに大きな違いを理解できるようになります。

FMDB と呼ばれる SQLite 用の優れた高レベル ライブラリがあり、こちらの github で見つけることができます: https://github.com/ccgus/fmdb

ここでは、「Alter Table」などの直接 SQL クエリをオンザフライで実行できますが、目的はそれほど単純ではありませんが、実行するのは本当に楽しいプロジェクトになる可能性があります。

これで頑張ってください。

于 2012-09-25T21:38:05.907 に答える
0

私の最後の会社はこのようなことをしましたが、それは些細なことではありません。私はコードにアクセスできないので、これは多かれ少なかれメモリからのものになります。

  • エンティティ(辞書になります)に変換可能なプロパティを提供します

  • モデルオブジェクトは、このためのゲッターとセッターを提供する必要があります。これにより、プリミティブメソッドを駆動して属性を設定/取得します。

  • 値の読み取りと書き込みを行う-objectForKeyと-setObjectforKeyの行に沿ってゲッター/セッターを提供します

  • 「障害」と言われたら、エンティティの辞書を更新します

要約すると、キーと値のペアの辞書を維持します。おそらく、必要に応じて初期化および更新されるシャドウディクショナリを維持します。このコードを最後に見たのは約4年で、少しあいまいです。しかし、あなたはその考えを理解するべきです。それは魔法のようでした-任意のキー/値のペアを任意に設定でき(文字列キーとNSCoding準拠の値を想定)、辞書に現在のキーのセットを要求することで常にキーを要求できます。

于 2012-09-25T21:46:32.743 に答える
0

Core Data の目的はオブジェクトの永続化であり、オブジェクトに新しいプロパティを動的に追加できないため、これが Core Data で直接可能であるとは思いません。namevalue(文字列として)、およびdata typeフィールドを持つ「追加のプロパティ」エンティティへの対多関係を使用して、ある程度偽造することができます。

その場でテーブル構造を変更するには、SQLite を使用するのが最善の方法だと思います。(http://www.sqlite.org/lang_altertable.html)

于 2012-09-25T21:37:47.543 に答える