使用 AFIncrementalStore 和 AFRestClient 进行分页
Posted
技术标签:
【中文标题】使用 AFIncrementalStore 和 AFRestClient 进行分页【英文标题】:Pagination with AFIncrementalStore and AFRestClient 【发布时间】:2013-07-02 01:33:09 【问题描述】:谁能展示一些关于如何使用 AFPaginator 进行分页的示例。我正在使用 AFRestClient,我需要在我对实体的请求中关联 pagerId、offset 和 count 参数。
在我看来,通过使用 AFPaginator 关联这些参数应该是直截了当的。我搜索了一些示例,但找不到任何示例。
【问题讨论】:
【参考方案1】:我可以在分页方面取得一些进展,但还没有完成。
如果获取请求的 fetchLimit 和 fetchOffset 不为零,它将根据请求创建参数。
所以,在我的AFRESTClient
子类上,在创建请求之前,在方法@987654322@ 上,我将分页器设置为:
NSMutableDictionary *mutableParameters = [NSMutableDictionary dictionary];
self.paginator = [AFPageAndPerPagePaginator paginatorWithPageParameter:@"page" perPageParameter:@"per"];
[mutableParameters addEntriesFromDictionary:[self.paginator parametersForFetchRequest:fetchRequest]];
request = [self requestWithMethod:@"GET" path:@"feed" parameters:mutableParameters];
这将生成一个类似http://domain.com/feed?page=1&per=20
的请求。页面根据fetchOffset
和FetchLimit
计算为
NSUInteger perPage = fetchRequest.fetchLimit == 0 ? kAFPaginationDefaultPerPage : fetchRequest.fetchLimit;
NSUInteger page = fetchRequest.fetchOffset == 0 ? kAFPaginationDefaultPage : (NSUInteger)floorf((float)fetchRequest.fetchOffset / (float)perPage) + 1;
所以,我可以让 fetch 请求另一个页面,但由于我使用的是 NSFetchedResultsController
,所以当我滚动 UITableView
时,我无法让它请求另一个页面。我试图做一些事情:
[NSFetchedResultsController deleteCacheWithName:[self.fetchedResultsController cacheName]];
self.fetchedResultsController.fetchRequest.fetchOffset = self.visibleChunk * self.chunkSize;
[_fetchedResultsController performSelectorOnMainThread:@selector(performFetch:) withObject:nil waitUntilDone:NO modes:@[ NSRunLoopCommonModes ]];
这里,visibleChunk
应该用来带另一个页面,chunkSize
是一个API请求所需的item数。
这不是对您问题的直接回复,但我希望它可以帮助您找到答案并在此处发布:)
如果我发现更多内容,我会更新。
【讨论】:
我设法让它工作。但它不适用于 NSFetchedResultsController。使用 NSFetchRequest,您只需将fetchOffset
设置为fetchLimit
的倍数。所以,如果你想为每页 10 个项目获取第 2 页,设置 fetchOffset
等于 20,使用这个更改的 NSFetchRequest 对象执行新的 fetch,你就完成了。以上是关于使用 AFIncrementalStore 和 AFRestClient 进行分页的主要内容,如果未能解决你的问题,请参考以下文章
AFIncrementalStore:仅使用 ID 拉取相关实体
带有 MagicalRecord 和多个商店的 AFIncrementalStore
AFIncrementalStore 将核心数据与 REST API 同步
RestKit 和 AFIncrementalStore 的区别