过去我为每个RKResponseDescriptor以及每个RKObjectManager get / post / patch / delete方法指定了路径参数。这很有效,但似乎RKRouter是更好,更模块化的方法。
我在设置包含嵌套变量的动态路由时遇到问题。例如:
添加路线
RKRoute *locationsRoute = [RKRoute routeWithClass:[Location class] pathPattern:@"users/:userID/locations/:locationID" method:RKRequestMethodAny];
[[RKObjectManager sharedManager].router.routeSet addRoutes:@[locationsRoute]];
设置响应描述符
RKResponseDescriptor *locationResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:locationResponseMapping
method:RKRequestMethodAny
pathPattern:nil
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
进行对象管理员调用
[[RKObjectManager sharedManager] getObject:[Location class] path:nil parameters:nil success:nil failure:nil];
在使用路由器之前,我会在对象管理器调用路径中包含userID。 (如:path:[NSString stringWithFormat:@"users/%@/locations/%@", [self getCurrentUser].userID, location.locationID]
)。但是,在使用路由器时,我似乎无法弄清楚如何指定它。 这样做的正确方法是什么?我希望用户ID不必硬编码到路径路径中。
重要的是要注意我的所有映射都已正确设置,在尝试实现路由之前一切都运行良好。任何帮助表示赞赏!
答案 0 :(得分:1)
你的路线很好,这是错的:
[[RKObjectManager sharedManager] getObject:[Location class] ...
因为您需要传递Location
类的实例(而不是类对象),并且该实例需要设置userID
和locationID
属性,以便可以将它们注入路径路径模式。
答案 1 :(得分:0)
记住Wain的回答,我最终需要为一个对象提供多条不同的路线;其索引是基于关系的路线。例如:
<强>索引强>
RKRoute *locationIndexRoute = [RKRoute routeWithRelationshipName:@"locations" objectClass:[User class] pathPattern:@"users/:userID/locations" method:RKRequestMethodGET];
[[RKObjectManager sharedManager] getObjectsAtPathForRelationship:@"locations" ofObject:[self getCurrentUser] parameters:nil success:nil failure:nil];
<强>更新强>
RKRoute *locationUpdateRoute = [RKRoute routeWithClass:[Location class] pathPattern:@"users/:userID/locations/:locationID" method:RKRequestMethodPATCH];
[[RKObjectManager sharedManager] patchObject:location path:nil parameters:nil success:nil failure:nil];