2014-11-18 6 views
1

У меня есть два объекта:Объединение двух объектов одного типа

deviceConfigInfo и deviceStatusInfo

Оба содержат массив devices (так Theres третий device объекта на самом деле).

Для каждого device вернулся в deviceConfigInfo есть эти свойства:

  • uuid
  • name
  • somethingElse
  • lookAnotherOne

и deviceStatusInfo

  • uuid
  • name
  • somethingElse
  • someStatusInfo
  • someMoreStuff

(Если вы еще не догадались, я просто сделал некоторые случайные свойства)

Итак, к тому третьему объекту, о котором я говорил, device, я создал его со всеми свойствами. Теперь, на мой вопрос, скажем, обновляется deviceStatusInfo, как я могу обновить объект device, не потеряв «старые» данные, которые не перезаписаны (в данном случае это свойство lookAnotherOne).

Должен ли быть ручной процесс получения устройства с соответствующим uuid, а затем обновление каждого из свойств для deviceStatusInfo или есть более быстрый способ сделать это? Представьте, что было множество свойств.

Надеюсь, это имеет смысл. Если это помогает, я использую Mantle для создания объектов/моделей.

ответ

2

я заметил, что Мантия имеет следующую функцию, которую я был в состоянии использовать:

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]; 
Смежные вопросы