3

RestKit バージョン 0.2 を使用していますが、次のように RKRequestOperation を呼び出すと、UI がブロックされます (つまり、UI が途切れたり応答しなくなったりします)。

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSString *urlString = [NSString stringWithFormat:@"http://localhost:8080/models?offset=%d&rows=%d", _offset, _numRows];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[_responseDescriptor]];
    [operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
        NSLog(@"Got models: %@", [result array]);
        [self addModelsToView:[results array]];
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"FAILED!");
    }];

    [operation start];
}

もう少し背景:

新しいモデルビューを無限にロードするためにこれを行っていますUIScrollView。ユーザーがビューの一番下までスクロールしたことを検出し (座標ロジックは編集済み)、上記のように RestKit を使用してビューの次のセットをロードし、モデルが戻ってきたら、それらを のスクロール ビューにロードしますaddModelsToView。コメントアウトしてaddModelsToViewも途切れ途切れのロジックが残るので、RestKit (または少なくとも私がそれをどのように使用しているか) と関係があると確信しています。

RestKit について私が理解していることは、それが非同期でロードされるということです。

前もって感謝します!

4

1 に答える 1

7

を呼び出すstartと、呼び出し元NSOperationと同じスレッドで同期操作が開始されます。したがって、このダウンロードをメイン スレッドで実行しているため、UI の更新がブロックされます。

操作をキューに追加する必要があります

RestKit github ページには次の例があります。

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://restkit.org"];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://restkit.org/articles/1234.json"]];
RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];

[manager enqueueObjectRequestOperation:operation];
于 2012-12-14T19:54:44.193 に答える