2013-12-12 57 views
3

我想使用RestKit(即能够在请求后调用user.photos并使它们自动映射)在核心数据中拥有其拥有User对象的GET响应照片。然而,我不明白我如何设置它自动执行,而我必须明确地使用[user setPhotos:...]RKMappingResultRestKit映射未拥有的关系到拥有对象

有没有一种方法可以使用映射和响应描述符自动实现这一点?

路线/响应描述:

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" 
    } 
    ] 
} 

回答

1

不跟你似乎有可用的信息和方式,你”重新发送请求。

如果路径模式是@"/api/v1/photos/##USER_ID##"那么路由将为外键映射提供足够的信息。如果返回的JSON具有用户标识,那么将为外键映射提供足够的信息。

从技术上讲,操作具有填充关系所需的所有信息,但RestKit不会(当前)尝试执行此操作。你可以看看实现这个并提交一个拉请求。

+0

再次感谢Wain! – ZeNewb

+0

有什么你*不知道的*关于RestKit? –

+0

@MartinR好吧,我没有阅读所有的代码,所以我有时会做出错误的假设;) – Wain