1

我有两个对象:

deviceConfigInfodeviceStatusInfo

两者都包含一个数组devices(因此实际上还有第三个device对象)。

对于其中的每个device返回,deviceConfigInfo都有以下属性:

  • uuid
  • name
  • somethingElse
  • lookAnotherOne

并且对于deviceStatusInfo

  • uuid
  • name
  • somethingElse
  • someStatusInfo
  • someMoreStuff

(如果你没有猜到,我只是编了一些随机属性)

回到我提到的第三个对象device,我创建了它,并结合了所有属性。现在,我的问题是,说deviceStatusInfo更新了,我怎样才能更新device对象而不丢失未被覆盖的“旧”数据(在本例中为lookAnotherOne属性)。

是否必须手动获取匹配的设备,uuid然后更新每个属性,deviceStatusInfo或者是否有更快的方法来执行此操作?想象一下有很多属性。

希望这是有道理的。如果有帮助,我正在使用Mantle创建对象/模型。

4

1 回答 1

2

我注意到 Mantle 具有以下我可以使用的功能:

mergeValueForKey:fromModel:

所以在我的device模型中,我添加了两个函数:

  • 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 回答