合并两个相同类型的对象

时间:2014-11-18 16:36:47

标签: ios objective-c github-mantle

我有两个对象:

deviceConfigInfodeviceStatusInfo

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

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

  • uuid
  • name
  • somethingElse
  • lookAnotherOne

deviceStatusInfo

  • uuid
  • name
  • somethingElse
  • someStatusInfo
  • someMoreStuff

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

回到我提到的第三个对象device,我创建了所有属性的组合。现在,我的问题是,deviceStatusInfo更新,我如何更新device对象而不会丢失未被覆盖的“旧”数据(在这种情况下,lookAnotherOne属性)。

是否必须通过手动过程获取匹配的uuid设备,然后更新deviceStatusInfo的每个属性,或者有更快的方法吗?想象一下,有很多属性。

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

1 个答案:

答案 0 :(得分: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];