2013-03-06 16 views
6

Mam problem mapowanie następujące JSON ładunek za pomocą RestKit 0,20Restkit 0,20 zagnieżdżona tablica obiektów mapowania numerze

Próbuję map produktu i jego załączniki w postaci tablicy z następującymi przedmiotami. Nie używam RKEntityMapping, po prostu RKObjectMappings, ponieważ ta aplikacja nie używa Core Data. Sprawdziłem dokumentację dotyczącą mapowania obiektów w wiki RestKit i przyjrzałem się przypadkom testowym w kodzie źródłowym dla podobnej konfiguracji, ale bez powodzenia.

{ 
    "Result": { 
     "Product": { 
      "Name": "Evil Stuff", 
      "Description": "Its EVIL!", 
      "Attachments": [ 
       { 
        "Id": "c4277b8f-5930-4fee-a166-b5f311d3a353", 
        "Name": "commands_to_recreate_db.txt", 
        "Type": "Contraindications" 
       }, 
       { 
        "Id": "be4d2e2e-cb3e-48d2-9c7a-fbfddea3a1be", 
        "Name": "json.txt", 
        "Type": "Medication Guide" 
       } 
      ] 
     }, 
     "Company": { 
      "Name": "Omni Consumer Products", 
      "AddressLine1": "100 Evil Dr.", 
      "AddressLine2": null, 
      "AddressLine3": null, 
      "City": "MARS", 
      "State": null, 
      "Zip": "10000", 
      "Country": null, 
      "PhoneNumber1": "555-555-5555", 
      "PhoneNumber2": null, 
      "PhoneNumber3": null, 
      "FaxNumber": null, 
      "WebSite": null, 
      "Email": null 
     }, 
     "Representatives": [] 
    }, 
    "Messages": [], 
    "Success": true 
} 



@interface clinProduct : NSObject 

@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) NSString *description; 
@property (nonatomic, retain) NSArray *attachments; 


@interface clinAttachment : NSObject 

@property (strong, nonatomic) NSString *attachmentID; 
@property (strong, nonatomic) NSString *attachmentName; 
@property (strong, nonatomic) NSString *type; 

Oto mój obiekt mapowania i mój RKResponseDescriptor

RKObjectMapping *attachmentMapping = [RKObjectMapping mappingForClass:[clinAttachment class]]; 
    [attachmentMapping addAttributeMappingsFromDictionary:@{@"Id" : @"attachmentID", 
                 @"Name" : @"attachmentName", 
                 @"Type" : @"type"}]; 
    RKObjectMapping *productMapping = [RKObjectMapping mappingForClass:[clinProduct class]]; 
    [productMapping addAttributeMappingsFromDictionary:@{@"Description" : @"description", 
                   @"Name" : @"name"}]; 
    RKRelationshipMapping *relationshipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"Attachments" 
                          toKeyPath:@"attachments" 
                         withMapping:attachmentMapping]; 
    [productMapping addPropertyMapping:relationshipMapping]; 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:productMapping 
                   pathPattern:nil 
                    keyPath:@"Result.Product" 
                   statusCodes:[NSIndexSet indexSetWithIndex:200]]; 

jestem coraz prawidłowej odpowiedzi, ale dziwne jest jej tylko mapowanie atrybut opisu dla tego produktu, nawet nie jego imię!

2013-03-05 18:39:49.775 iOS[38965:c07] Loaded results: <RKMappingResult: 0x96a8950, results={ 
    "Result.Product" = "Its EVIL!"; 

Kiedy dodać drugi deskryptor odpowiedzi, wiercenie w dół Result.Product.Attachments, mogę dostać tablicę załączników nie ma problemu tylko z deskryptora odpowiedzi załączniki. Jakakolwiek pomoc byłaby ogromnie doceniona, o tym walczę od niedzielnego popołudnia. Przepraszamy za ścianę kodu, ale trudno jest opisać RestKit w pełni bez wszystkich elementów. Dziękuję Ci.

+2

Naprawiłem problem. Po pierwsze, RKMappingResult, który wkleiłem jest niepoprawny. Odwzorowuje element, ale wyświetla tylko jeden z jego atrybutów. Aby to działało, usunąłem RKRelationshipMapping i NSAray w klasie produktu i właśnie dodałem drugi RKResponseDescriptor dla załączników. Wszystko pojawia się poprawnie w RKMappingResult, tablica zawiera niestety niejednorodne elementy. To hack, ale w końcu rozwiązuje mój problem. –

+4

Czy możesz to opublikować jako odpowiedź? a następnie oznaczyć to jako odpowiedź? – Steven

Odpowiedz

2

Aby ułatwić i uczynić odpowiedź bardziej widoczne dla użytkowników:

komentarz @Jorge Chao (odpowiedź) na własne pytanie:

Odpowiedź na to pytanie:

I naprawiłem problem. Po pierwsze, wklejony RKMappingResult jest niepoprawny. Odwzorowuje element, ale wyświetla tylko jeden z jego atrybutów. Aby to działało, usunąłem RKRelationshipMapping i NSAray w klasie produktów i właśnie dodałem drugi załącznik RKResponseDescriptor dla załączników.

Wszystko pojawia się poprawnie w RKMappingResult, tablica zawiera niestety niejednorodne elementy. To hack, ale w końcu naprawił mój problem.

+0

Czy możesz pokazać, jak to wygląda w kodzie? –

Powiązane problemy