2011-07-17 34 views
7

Tôi muốn ánh xạ một chỉ mục mảng đã cho vào một thuộc tính với RestKit (OM2). Tôi có JSON này:RestKit mapKeyPath to Array index

{ 
    "id": "foo", 
    "position": [52.63, 11.37] 
} 

mà tôi muốn để ánh xạ đối tượng này:

@interface NOSearchResult : NSObject 
@property(retain) NSString* place_id; 
@property(retain) NSNumber* latitude; 
@property(retain) NSNumber* longitude; 
@end 

tôi không thể tìm ra cách để ánh xạ giá trị ra khỏi mảng vị trí trong JSON của tôi vào tính chất của lớp khách quan của tôi. Ánh xạ trông như thế này cho đến thời điểm này:

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[NOSearchResult class]]; 
[resultMapping mapKeyPath:@"id" toAttribute:@"place_id"]; 

Bây giờ, làm cách nào để thêm ánh xạ cho vĩ độ/kinh độ? Tôi đã thử nhiều thứ, điều đó không hiệu quả. ví dụ .:

[resultMapping mapKeyPath:@"position[0]" toAttribute:@"latitude"]; 
[resultMapping mapKeyPath:@"position.1" toAttribute:@"longitude"]; 

Có cách nào để lập bản đồ position[0] ra khỏi JSON vào latitude trong đối tượng của tôi?

Trả lời

3

Câu trả lời ngắn gọn là không - key-value coding không cho phép điều đó. Đối với bộ sưu tập, chỉ các hoạt động tổng hợp như max, min, avg, sum mới được hỗ trợ.

Tốt nhất có lẽ là để thêm một tài sản NSArray để NOSearchResult:

// NOSearchResult definition 
@interface NOSearchResult : NSObject 
@property(retain) NSString* place_id; 
@property(retain) NSString* latitude; 
@property(retain) NSNumber* longitude; 
@property(retain) NSArray* coordinates; 
@end 

@implementation NOSearchResult 
@synthesize place_id, latitude, longitude, coordinates; 
@end 

và xác định bản đồ như thế này:

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[NOSearchResult class]]; 
[resultMapping mapKeyPath:@"id" toAttribute:@"place_id"]; 
[resultMapping mapKeyPath:@"position" toAttribute:@"coordinates"]; 

Sau đó, bạn có thể gán vĩ độ và kinh độ từ tọa độ.

EDIT: Một nơi tốt để làm nhiệm vụ vĩ độ/kinh độ có lẽ là trong đối tượng đại biểu loader

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object; 

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects; 
+1

Cảm ơn - Tôi đã đã sợ nó sẽ không hoạt động. Các 'didLoadObject' gợi ý đã thực sự hữu ích! – cellcortex

+2

một nơi tốt hơn sẽ có các getters và setters tùy chỉnh cho lat và lon để điều khiển cấu trúc dữ liệu mảng bên dưới. – Jon

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