我有两个对象:
deviceConfigInfo
和deviceStatusInfo
两者都包含一个devices
数组(实际上是第三个device
对象)。
对于device
中返回的每个deviceConfigInfo
,都有以下属性:
uuid
name
somethingElse
lookAnotherOne
和deviceStatusInfo
uuid
name
somethingElse
someStatusInfo
someMoreStuff
(如果您没有猜到,我只是编造了一些随机属性)
回到我提到的第三个对象device
,我创建了所有属性的组合。现在,我的问题是,deviceStatusInfo
更新,我如何更新device
对象而不会丢失未被覆盖的“旧”数据(在这种情况下,lookAnotherOne
属性)。
是否必须通过手动过程获取匹配的uuid
设备,然后更新deviceStatusInfo
的每个属性,或者有更快的方法吗?想象一下,有很多属性。
希望这是有道理的。如果有帮助,我使用Mantle来创建对象/模型。
答案 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];