我有一个IBAction,可以通过iPad App中的按钮调用。
IBaction然后调用三种不同的方法来启动RestKit请求。
检查所有三个请求检索对象的最佳方法是什么?
目标是显示带有第一个请求的activityIndicator,并通过检索所有三个请求的对象来停止/隐藏activityIndicator。
我是RestKit的新手,所以如果这是一个太简单的问题,请原谅我。我试图在RestKit API的帮助下自己找到解决方案 - 文档。
答案 0 :(得分:4)
我想你使用异步请求。一个简单的解决方案是检查RKObjectLoderDelegate
的{{1}}方法是否已加载所有数据。
启动RestKit请求时,您可以在请求中添加一个“标记”(在RestKit中称为- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects
),然后在委托回调中检索该标记。
例如,您可以实现以下逻辑:
创建请求时,请为每个请求添加特定的用户数据:
userData
并检查RKObjectLoader *loader = [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getMyData" objectMapping:mapping delegate:self];
[loader setUserData:@"FirstRequest"];
...
RKObjectLoader *loader = [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getMyData" objectMapping:mapping delegate:self];
[loader setUserData:@"ThirdRequest"];
didLoadObjects:
加载请求时不要忘记处理错误情况。
或者,如果此方法不适合您的方案 - 您可以在单独的队列中添加和管理请求。跟踪进度。如果您需要有关第二个选项的更多信息,请告诉我。
答案 1 :(得分:1)
有一种简单的方法,在objectLoader委托中,你可以使用objectLoader这样的内置函数:
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
if ([objectLoader wasSentToResourcePath:@"/path1"]) {
//handle request for /path1
//objects are loaded for request1
} else if ([objectLoader wasSentToResourcePath:@"/path2"]){
//handle request for /path2
//objects are loaded for request2
} else if ([objectLoader wasSentToResourcePath:@"/path3"]){
//handle request for /path3
//objects are loaded for request3
}
}
就是这么简单。