最近、プロジェクトを RestKit 0.1x から 0.2x にアップグレードしましたが、特にページングの変更について頭を悩ませています。
次のコメント付きのコードを説明してくれる人はいますか? RKPaginator.h からのものです。
/**
Initializes a RKPaginator object with the a provided patternURL and mappingProvider.
@param request A request with a URL containing a dynamic pattern specifying how paginated resources are to be acessed.
@param paginationMapping The pagination mapping specifying how pagination metadata is to be mapped from responses.
@param responseDescriptors An array of response descriptors describing how to map object representations loaded by object request operations dispatched by the paginator.
@return The receiver, initialized with the request, pagination mapping, and response descriptors.
*/
- (id)initWithRequest:(NSURLRequest *)request
paginationMapping:(RKObjectMapping *)paginationMapping
responseDescriptors:(NSArray *)responseDescriptors;
特に把握しようとしているのは、responseDescriptor の役割です。
応答記述子とは何ですか? クエリから返された paginators オブジェクト コレクション内の実際のオブジェクトのマッピングですか? もしそうなら - 私はこれを paginationMapping にマッピングしました。それはステータスコードですか?ドキュメントを確認しましたが、わかりません。
例へのポインタまたはリンクをいただければ幸いです.既存のコードで明確にすることができます-これは、ユーザーが選択したストリームのタイプに応じてアクティビティストリームをロードするコードです...アクティビティ、プロジェクトリスト、またはお気に入り(目撃リスト)..
-(void)setPaginatorForStream:(NSString*)streamName {
[BBLog Log:@"BBStreamController.setPaginatorForStream:"];
[BBLog Debug:@"streamName:" withMessage:streamName];
__weak typeof(self) weakSelf = self;
NSString *streamUrl = [NSString stringWithFormat:@"/%@?PageSize=:perPage&Page=:currentPage", streamName];
if (!self.paginator) {
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKObjectMapping *paginationMapping = nil;
// TODO: Create response descriptors for these puppies:
if([streamName isEqualToString:@"favourites"]){ // sightings
paginationMapping = [RKObjectMapping mappingForClass:[BBSightingPaginator class]];
self.paginator = [[BBSightingPaginator alloc]initWithRequest:[NSURLRequest requestWithURL:[[NSURL alloc]initWithString:streamUrl]]
paginationMapping:paginationMapping
responseDescriptors:nil
andDelegate:weakSelf];
}
else if([streamName isEqualToString:@"projects"]){
paginationMapping = [RKObjectMapping mappingForClass:[BBProjectPaginator class]];
self.paginator = [[BBProjectPaginator alloc]initWithRequest:[NSURLRequest requestWithURL:[[NSURL alloc]initWithString:streamUrl]]
paginationMapping:paginationMapping
responseDescriptors:nil
andDelegate:weakSelf];
}
else {
paginationMapping = [RKObjectMapping mappingForClass:[BBActivityPaginator class]];
self.paginator = [[BBActivityPaginator alloc]initWithRequest:[NSURLRequest requestWithURL:[[NSURL alloc]initWithString:streamUrl]]
paginationMapping:paginationMapping
responseDescriptors:nil
andDelegate:weakSelf];
}
self.paginator.perPage = 20;
[self.paginator setCompletionBlockWithSuccess:^(RKPaginator *paginator, NSArray *objects, NSUInteger page) {
[weakSelf.tableItems addObjectsFromArray:objects];
[weakSelf.tableView reloadData];
} failure:^(RKPaginator *paginator, NSError *error) {
NSLog(@"Failure: %@", error);
}];
}
}
この投稿 ( https://github.com/RestKit/RestKit/issues/1035 )の smakman の例に従って、ここまで到達しましたが、既存のマップされたオブジェクトからページネーターをインスタンス化しています。
ご覧のとおり、responseDescriptors を nil しました...そこに何を入れますか?
どうもありがとう、ハミッシュ。