如何使用RestKit获取结果页面?

时间:2012-08-01 02:43:54

标签: objective-c ios pagination paging restkit

我正在使用RestKit 0.10.1,我正在寻找一些示例代码来处理分页结果的Web服务。我有GET请求获取没有参数的第一页并将它们粘贴到UITableView中。理想情况下,当我到达页面底部时,它将获取下一页并在底部插入这些值。

我想我应该澄清一下,我更关心的是如何进行抓取而不是如何将它们添加到桌子末端,但如果有建议,我很乐意听到它们。这些记录也没有存储在托管对象中,它们只是在内存中。

更新:在将我的Google搜索从“分页”切换为“分页”后,我遇到了RKObjectPaginator,并意识到我正在处理的API非常大脑死亡而且没有输出您所在页面或其大小的任何计数或数据。

1 个答案:

答案 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];
    }
}

重要的是在将数据传递给目标对象之前映射数据。这有效地允许您使用一个响应执行两个映射(一个映射到分页器对象,一个映射到数据模型)。​​