1

私は2つのオブジェクトを持っています:

deviceConfigInfodeviceStatusInfo

どちらにもの配列が含まれています(実際にdevicesは3番目のオブジェクトがあります)。device

device返されるそれぞれについて、deviceConfigInfo次のプロパティがあります。

  • uuid
  • name
  • somethingElse
  • lookAnotherOne

そしてdeviceStatusInfo

  • uuid
  • name
  • somethingElse
  • someStatusInfo
  • someMoreStuff

(ご想像のとおり、私はいくつかのランダムなプロパティを作成しました)

前述の 3 番目のオブジェクトに戻りますがdevice、すべてのプロパティを組み合わせて作成しました。さて、私の質問は、上書きされていない「古い」データ (この場合はプロパティ)を失わずにオブジェクトdeviceStatusInfoを更新するにはどうすればよいかということです。devicelookAnotherOne

一致するデバイスを取得してからuuid各プロパティを更新する手動プロセスでdeviceStatusInfoある必要がありますか?それとも、これを行うためのより迅速な方法はありますか? たくさんのプロパティがあったと想像してください。

うまくいけば、これは理にかなっています。それが役立つ場合は、Mantleを使用してオブジェクト/モデルを作成しています。

4

1 に答える 1

2

Mantle には、使用できる次の機能があることに気付きました。

mergeValueForKey:fromModel:

したがって、私のdeviceモデルでは、次の 2 つの関数を追加しました。

  • mergeConfigInfoKeysFromModel:
  • mergeStatusInfoKeysFromModel:

NSStringこれらの関数は、プロパティ/キーを表す値を含む配列にアクセスできます。の配列とconfigInfoプロパティstatusInfo/キーの配列があります。

次に、キーをループし、使用valueForKeyして実際の値があることを確認します。ある場合は、 を呼び出しますmergeValueForKey:fromModel:

コード例:

- (void)mergeConfigInfoKeysFromModel:(MTLModel *)model
{
    NSArray *configInfoKeys = @[@"uuid", @"name", @"somethingElse", @"lookAnotherOne"];

    for (NSString *key in configInfoKeys) {
        if ([model valueForKey:key]) {
            [self mergeValueForKey:key fromModel:model];
        }
    }
}

あとは、更新を取得したときにオブジェクトに対して適切なマージ関数を呼び出し、device更新されたオブジェクトを渡すだけdeviceです。以下のように:

[self.device mergeConfigInfoKeysFromModel:deviceUpdate];
于 2014-11-19T13:41:02.920 に答える