3
我想使用RestKit(即能够在请求后调用user.photos
并使它们自动映射)在核心数据中拥有其拥有User
对象的GET响应照片。然而,我不明白我如何设置它自动执行,而我必须明确地使用[user setPhotos:...]
RKMappingResult
RestKit映射未拥有的关系到拥有对象
有没有一种方法可以使用映射和响应描述符自动实现这一点?
路线/响应描述:
RKRoute *userPhotos = [RKRoute routeWithRelationshipName:@"photos" objectClass:[User class] pathPattern:@"/api/v1/photos" method:RKRequestMethodGET];
[[[[APIClient objectManager] router] routeSet] addRoute:userPhotos];
RKResponseDescriptor *photosDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:self.photoMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:kJsonPhotos
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[[APICacheStore sharedStore] objectManager] addResponseDescriptorsFromArray:@[photosDescriptor]];
代码:
+ (void)getPhotosForUser:(User *)user success:(void (^)())success failure:(void (^)(NSString *errorMsg))failure {
NSAssert(user, @"User must not be nil when we attempt to fetch their photos.");
[[APIClient objectManager] getObjectsAtPathForRelationship:@"photos" ofObject:user parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
[user setPhotos:[NSSet setWithArray:[mappingResult array]]];
success();
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
failure(error.localizedDescription);
}];
}
原始JSON:
{
"meta": {
"total": 2,
"offset": 0,
"limit": 10
},
"photos": [
{
"id": "d8e1ca59-9f50-4963-8e7e-0b0c8de4bed6",
"name": "Mary at the mall",
"updated_at": "2013-12-11T10:16:41.000Z",
"completed_at": null,
"created_at": "2013-12-11T10:16:41.000Z",
"image": "images/is9912zh/image.jpeg"
},
{
"id": "1c75273a-7675-43a9-9b62-3d4236439ec6",
"name": "John at the park",
"updated_at": "2013-12-11T10:16:41.000Z",
"completed_at": null,
"created_at": "2013-12-11T10:16:41.000Z",
"image": "images/aj92j127/image.jpeg"
}
]
}
再次感谢Wain! – ZeNewb
有什么你*不知道的*关于RestKit? –
@MartinR好吧,我没有阅读所有的代码,所以我有时会做出错误的假设;) – Wain