2013-03-06 32 views
6

Tôi đang gặp một vấn đề lập bản đồ tải trọng JSON sau sử dụng RestKit 0,20Restkit 0,20 mảng lồng nhau của các đối tượng bản đồ vấn đề

tôi đang cố gắng để lập bản đồ sản phẩm và đính kèm nó như là một mảng với các đối tượng sau đây. Tôi không sử dụng RKEntityMapping, chỉ đơn giản là RKObjectMappings vì ứng dụng này không sử dụng Core Data. Tôi đã tham khảo tài liệu về Object Mappings trên trang Wiki RestKit và xem xét các trường hợp thử nghiệm trong mã nguồn cho một thiết lập tương tự nhưng không có may mắn.

{ 
    "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; 

Dưới đây là ánh xạ đối tượng của tôi và RKResponseDescriptor tôi

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]]; 

Tôi nhận được một câu trả lời hợp lệ, nhưng điều kỳ lạ là nó chỉ lập bản đồ thuộc tính mô tả cho sản phẩm, thậm chí không phải tên của nó!

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

Khi tôi thêm một mô tả phản ứng thứ hai, đi sâu vào Result.Product.Attachments, tôi có thể nhận được một loạt các file đính kèm không có vấn đề chỉ với những mô tả file đính kèm phản ứng. Bất kỳ sự giúp đỡ nào sẽ được đánh giá rất cao, tôi đã đập đầu tôi vào lúc này từ chiều Chủ nhật. Xin lỗi cho bức tường mã, nhưng thật khó để mô tả các thiết lập RestKit hoàn toàn mà không có tất cả các phần. Cảm ơn bạn.

+2

Tôi đã khắc phục sự cố. Đầu tiên, RKMappingResult mà tôi đã dán không chính xác. Nó IS ánh xạ một mục, nhưng nó chỉ hiển thị một trong các thuộc tính của nó. Để làm cho nó hoạt động, tôi đã loại bỏ RKRelationshipMapping và NSAray trong lớp sản phẩm và chỉ thêm một RKResponseDescriptor thứ hai cho các tệp đính kèm. Tất cả mọi thứ xuất hiện một cách chính xác trong RKMappingResult, mảng chỉ chứa các phần tử không đồng nhất. Đó là một hack, nhưng cuối cùng nó khắc phục vấn đề của tôi. –

+4

Bạn có thể đăng nó làm câu trả lời không? và sau đó đánh dấu nó như là một câu trả lời? – Steven

Trả lời

2

Để tạo điều kiện và đưa ra câu trả lời rõ ràng hơn cho người sử dụng:

bình luận @Jorge Chao (câu trả lời) về câu hỏi riêng:

trả lời của câu hỏi này:

tôi đã khắc phục sự cố. Đầu tiên, RKMappingResult mà tôi đã dán không chính xác. Nó IS ánh xạ một mục, nhưng nó chỉ hiển thị một trong các thuộc tính của nó. Để hoạt động, tôi đã xóa RKRelationshipMappingNSAray trong lớp sản phẩm và chỉ cần thêm RKResponseDescriptor giây thứ hai cho các tệp đính kèm.

Mọi thứ xuất hiện chính xác trong RKMappingResult, mảng này chỉ chứa các phần tử không đồng nhất. Đó là một hack, nhưng cuối cùng nó đã khắc phục được vấn đề của tôi.

+0

Bạn có thể cho biết nó trông như thế nào trong mã? –

Các vấn đề liên quan