2015-09-08 2 views
0

Я использую RestKit для отображения JSON API для IOS объектыRestKit один ко многим отношений обратного отображения

+ (RKObjectMapping *)addressMapping 
{ 
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Address class]]; 

    [mapping addAttributeMappingsFromDictionary:@{ 
                @"id": @"idAddress", 
                @"id_city": @"idCity", 
                @"id_country": @"idCountry" 
                }]; 

    return mapping; 
} 

+ (RKObjectMapping *)userMapping 
{ 
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[User class]]; 

    [mapping addAttributeMappingsFromDictionary:@{ 
                @"id": @"idUser", 
                @"email": @"email", 
                }]; 

    [mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"address" toKeyPath:@"address" withMapping:[self addressMapping]]]; 
    [mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"branch_addresses" toKeyPath:@"branchAddresses" withMapping:[self addressMapping]]]; 

    return mapping; 
} 

Когда я получаю данные от API, они правильно отображаются на классы:

RKResponseDescriptor *responseDescriptorGet = 
    [RKResponseDescriptor responseDescriptorWithMapping:[RestMappingProvider userMapping] 
               method:RKRequestMethodGET 
              pathPattern:@"/api/user/user" 
               keyPath:@"data" 
              statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

Однако, когда я обновляю данные, то один ко многим отношений (branch_addresses) не отображается правильно:

RKRequestDescriptor *requestDescriptor = 
    [RKRequestDescriptor requestDescriptorWithMapping:[[RestMappingProvider userMapping] inverseMapping] 
              objectClass:[User class] 
              rootKeyPath:nil 
               method:RKRequestMethodPUT]; 

Данные, полученные сервером:

[id] => 123 
[email] => [email protected] 
[address] => Array 
    (
     [id] => 3 
     [id_city] => 1 
     [id_country] => 1 
    ) 
[branch_addresses] => Array 
    (
     [0] => Array 
      (
       [id] => 4 
      ) 

     [1] => Array 
      (
       [id_city] => 1 
      ) 

     [2] => Array 
      (
       [id_country] => 1 
      ) 
    ) 

Какие данные должны выглядеть на сервере:

[id] => 123 
[email] => [email protected] 
[address] => Array 
    (
     [id] => 3 
     [id_city] => 1 
     [id_country] => 1 
    ) 
[branch_addresses] => Array 
    (
     [0] => Array 
      (
      [id] => 4 
      [id_city] => 1 
      [id_country] => 1 
      ) 
    ) 

Содержание PHP: // ввод на стороне сервера (необработанные данные):

id=123&email=test%40test.com&address[id]=3&address[id_city]=1&address[id_country]=1&branch_addresses[][id]=4&branch_addresses[][id_city]=1&branch_addresses[][id_country]=2&branch_addresses[][id]=6&branch_addresses[][id_city]=1&branch_addresses[][id_country]=1 
+0

Parsed JSON? Вы должны объяснить, что не так. – Wain

+0

Hello Wain. Я обновляю вопрос с ожидаемым выходом (формат JSON). адрес - это тот же объект, что и branch_address. branch_addresses - это массив из них. Почему TestKit возвращает адрес в правильном формате, когда есть отношения 1-1, но неправильный формат с отношением 1-много? –

+0

@Wain Я действительно не уверен, что может быть неправильным, если одно направление (API -> iOS) правильно отображает данные и другое направление (iOS -> API). Вам нужна дополнительная информация? –

ответ

1

Не все формы передачи данных являются в равной степени выразительными. Кажется, вы отправляете параметры запроса вместо JSON или, по крайней мере, кодированный в форму набор данных. Вам нужно установить тип mime-запроса по умолчанию, чтобы restkit знал, что вы хотите отправить JSON, и он преобразуется в требуемый формат.

+0

Ты потрясающий. Когда я изменил requestSerializationMIMEType на RKMIMETypeJSON, все работает правильно. Спасибо! –

Смежные вопросы