0

最近、プロジェクトを 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 しました...そこに何を入れますか?

どうもありがとう、ハミッシュ。

4

1 に答える 1

1
- (id)initWithRequest:(NSURLRequest *)request
    paginationMapping:(RKObjectMapping *)paginationMapping
  responseDescriptors:(NSArray *)responseDescriptors;

簡単に言えば:

  • request: データを取得するにはどこに行けばよいですか
  • paginationMapping: 応答で、現在どのページにいるのかを知るにはどうすればよいですか
  • responseDescriptors: 応答で、関心のあるデータを取得するにはどうすればよいですか

objectManager使用するとコードが単純になりますが、応答記述子を完成させれば、現在持っているものは機能するはずです。現在、実行する場合にリクエストを行うのに十分な情報をRestKitに提供しますが、応答からオブジェクトをマッピングして完了ブロックパラメーター[self.paginator loadPage:1];に戻る方法に関する情報は提供しません。NSArray *objects

于 2013-05-04T07:04:49.860 に答える