RestKit: сопоставление нескольких атрибутов с одним массивом

#ios #objective-c #restkit

#iOS #objective-c #restkit

Вопрос:

У меня есть класс Objective C, который имеет следующие атрибуты

 @property(nonatomic, strong) NSString *name;
@property(nonatomic, strong) NSMutableArray *companies;
@property(nonatomic, strong) NSMutableArray *users;
@property(nonatomic, strong) NSMutableArray *tags;
  

Эти массивы представляют собой коллекции других объектов (экземпляров Company, User и класса тегов).
Мне нужно создать requestDescriptorWithMapping для запроса POST, который
поместит все элементы массивов в один с именем params со следующей
структурой:

 { name: "Test", 
  params: [
    {param:'company', values:['CompanyName1','CompanyName2'..],
    {param:'users', values:['UserName1','UserName2'..]
  ]
}
  

Как лучше всего поступить здесь? Я тестирую RKBlockValueTransformer, но
пока безуспешно. Я могу создать этот массив вручную, создав три NSMutableDictionaries, но хотел проверить, есть ли лучший способ для этого.

Комментарии:

1. Покажите свой блочный преобразователь и насколько он приближает вас к тому, что вы хотите. Нет волшебного способа получить желаемое представление, поскольку вы создаете новые данные для значения ‘param’.

Ответ №1:

Вы могли бы сделать это:

 [@{ @"name": self.name, 
   @"params": @[
    @{@"param":@"company", values:[self.companies valueForKey:@"name"]}
    @{@"param":@"users", values:[self.users valueForKey:@"name"]}
  ]
} mutableCopy] 
  

Предполагая, что ваши классы Company и User имеют свойство name. И если вы не используете ARC, вам нужно будет автоматически удалить результат mutableCopy

Комментарии:

1. правильно, это «ручной» способ. Есть ли способ интегрировать это в RestKit?

2. Что вы имеете в виду под интеграцией в RestKit?

3. например, могу ли я использовать этот словарь здесь: RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[self class]]; [сопоставление addAttributeMappingsFromDictionary:thatDictionary]; ?