我正在使用RestKit 0.10.1,我正在寻找一些示例代码来处理分页结果的Web服务。我有GET请求获取没有参数的第一页并将它们粘贴到UITableView中。理想情况下,当我到达页面底部时,它将获取下一页并在底部插入这些值。
我想我应该澄清一下,我更关心的是如何进行抓取而不是如何将它们添加到桌子末端,但如果有建议,我很乐意听到它们。这些记录也没有存储在托管对象中,它们只是在内存中。
更新:在将我的Google搜索从“分页”切换为“分页”后,我遇到了RKObjectPaginator,并意识到我正在处理的API非常大脑死亡而且没有输出您所在页面或其大小的任何计数或数据。
答案 0 :(得分:4)
正如您所说,您通常可以使用RKObjectPaginator。但有时,正如您所说,如果您的API不合规,它将无法正常工作。
您可以通过执行以下操作完全自定义分页:
1)创建一个RKObjectPaginator的子类(如果你想沿着那条路走下去,你可以创建自己的类)。
2)关键是要覆盖这个委托方法
- (void) objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData;
3)在此方法中,您将获取mappableData对象并找到“下一页”参数。但是你这样做取决于你。以下是使用Bing API的示例。
- (void) objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData {
NSMutableDictionary* d = [[*mappableData objectForKey: @"d"] mutableCopy];
NSString* next = [d objectForKey: @"__next"];
if(!next) {
currentOffset = 0;
}
else {
NSDictionary* params = [next queryParameters];
perPage = [[params objectForKey: @"$top"] intValue];
currentOffset = [[params objectForKey: @"$skip"] intValue];
}
}
重要的是在将数据传递给目标对象之前映射数据。这有效地允许您使用一个响应执行两个映射(一个映射到分页器对象,一个映射到数据模型)。