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.
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. –
Czy możesz to opublikować jako odpowiedź? a następnie oznaczyć to jako odpowiedź? – Steven