0

AFNetworking lib を使用して JSON データを取得しており、次のように完了ブロックを追加したいと考えていました。

-(void)getData{

    NSString *link=@"http://localhost:8080/address/address/address/";

    NSURL *url= [ NSURL URLWithString:link];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        arrayofA=[JSON valueForKeyPath:@"a"];
        arrayofB=[JSON valueForKeyPath:@"b"];


        [[self techTableView] reloadData];

    } failure:nil];


    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        //-- This block gets invoked periodically as the download progress

        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(totalBytesRead * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void){

            dispatch_async(dispatch_get_main_queue(), ^{
                // HUD treatment
            });
        });



    }];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Completed:");

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);

    }];

    [operation start];

}

完了ブロックを追加すると、結果が表示されなくなり、画面に何も表示されAFJSONRequestOperationず、ブロックが実行されていないことに気づき、そこにログを出力しましたが、表示されません。何が問題なのですか?どうもありがとうございました。

4

1 に答える 1

2

このコードを捨ててください:

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Completed:");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

代わりに、ログを のブロックに入れますJSONRequestOperationWithRequest:success:failure:(現在、成功ブロックはあるが失敗ブロックはなく、削除する必要があるコードによって成功ブロックが削除されています)。

ではsetDownloadProgressBlock、メイン スレッドにプッシュして UI を更新するだけです。わざわざ遅延を作成しようとしないでください。明らかにランダムな動作につながるだけです。また、ダウンロードの結果を使用しようとしないでください。これはsuccessブロック内でのみ行う必要があります。

于 2013-08-24T13:29:32.317 に答える