1

単純な問題ですが、私にとっては難しい実行です。私はアルファ版のアプリのみに取り組んでいますが、テスターは最新のデータベースを持っている必要があります。私は、ClothingとClothingRecordの2つのエンティティを持つコアデータモデルを持っています。

は「静的」モデルであり、データ(帽子、シャツ、パンツなど)がプリロードされており、モデルを更新するたびにのみ変更されます。

ClothingRecordは、エンティティClothingと関係を持つユーザー入力エンティティです。

ここに画像の説明を入力してください

私が遭遇したのは、Clothingのデータを変更したいということです。衣料品のプロパティを変更する(名前を「帽子」から「キャップ」に変更するなど)だけでなく、アイテムを追加および削除したいと思います。

私はCoreDataにかなり慣れていないので、データをプリロードする方法についてRay Wenderlichのチュートリアルを使用しました: http ://www.raywenderlich.com/980/core-data-tutorial-how-to-preloadimport-existing-data

これは初めてうまくいきました。データベースを稼働させています。ただし、変更したので、 Clothingエンティティを適切に更新する方法がわかりません。すべてのオブジェクトをトラバースして比較しますか?新しいものを追加するだけですか?既存の関係のためにオブジェクトに移動して削除することはできませんよね?

プリロードされたデータでCoreData駆動型アプリを更新する方法に関するガイドやチュートリアルはありますか?これはいつも起こっていると思いますが、確かなリソースは見つかりません。

4

1 に答える 1

2

すべてのオブジェクトをトラバースして比較しますか?新しいものを追加するだけですか?既存の関係のためにオブジェクトに移動して削除することはできませんよね?

場合によります。私はあなたにいくつかの提案をしようとします。

すべてのオブジェクトをトラバースして比較しますか?

トラバースして比較するために、最初に、識別子として機能する属性(guidなど)を挿入します。識別子があると、取得したオブジェクトをCoreDataと比較できます。たとえば、「Hat」にGUIDが1234あり、「Cap」に同じGUIDがある場合、識別子を取得して、そのオブジェクトを新しい名前で更新できます。NSPredicateこれは、 (how-to-update-existing-object-in-core-data )を設定することで実現できます。

新しいものを追加するだけですか?

2番目のエンティティとの関係がない場合にそれを行うことができます。逆に、新しいオブジェクトを元の関係にリンクする必要があります。

既存の関係のためにオブジェクトを削除できません

前と同じように、これらの関係を再作成してから、関心のあるオブジェクトを削除する必要があります。

CDを使い始めたばかりの場合は、最初の解決策を試してみます。また、コアデータ全般に関する以前のSO投稿で書いた古い回答を提案します(mapping-business-objects-with-core-data-in-ios)。

それが役に立てば幸い。

編集

最後の2つのオプションについては、2ステップの操作を実行できます。

まず、事前入力さClothingれたオブジェクトを取得できるようにするリクエストを作成します。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Clothing" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

配列resultsには、取得したオブジェクトが含まれ、for-loop新しいオブジェクトを作成して適切な関係を設定します。

for(Clothing* clothing in results) {

    Clothing* newClothing = [NSEntityDescription insertNewObjectForEntityForName:@"Clothing" inManagedObjectContext:moc];
    newClothing.name = @"Cap";
    newClothing.relationshipToWhatYouWant = clothing.relationshipToWhatYouWant;
}

最後に、必要に応じて、古いオブジェクトを削除します。

PS手書きで書いたので、コードを確認してください。

于 2012-06-02T15:47:01.487 に答える