2

AFHTTPRequestOperation を使用して、解析する HTML ページをいくつか取得しています。私が抱えている問題は、たとえばサーバーに接続するときに間違ったポート番号を使用すると、「失敗した」エラーブロックが起動しないことです。代わりに完了ブロックが発生しますが、応答文字列は nil です。ASIHTTP から AFNetworking に切り替えたところですが、ASIHTTP ではエラーが発生します。

確かにこれはエラーを提供するはずですか?どうすればこれをトラップできますか?

    NSString *urlString;
    urlString = [NSString stringWithFormat:@"%@://%@:%@/",kHttp,_IP,_Port];
    NSURL *url = [NSURL URLWithString:urlString];

    // Set authorization
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
    [httpClient setAuthorizationHeaderWithUsername:_User password:_Pass];

    NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"Info.htm" parameters:nil];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([self parseInfoLive:operation.responseString])
            _count_parsed++;
        if (_count_parsed == 2)
            [[NSNotificationCenter defaultCenter] postNotificationName:@"downloadsComplete" object:nil];
    }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                         NSLog(@"Error during connection: %@",error.description);
                                         [[NSNotificationCenter defaultCenter] postNotificationName:@"errorConnecting" object:nil];
                                     }];
[operation start];
4

1 に答える 1

0

これは、この質問から 2.5 年経っても AFNetworking のバグのようです。これは、応答に特殊文字が含まれている場合に発生します (テキスト ビューアーでも解析できない場合があるため、スペースとして表示されることがあります)。受信した JSON 文字列を NSUTF8StringEncoding に変換してから、必要に応じて NSData として使用できます。

NSURL *url = <YOUR REQUEST URL>
NSString *data = [NSString stringWithContentsOfURL:url];
NSData *metOfficeData = [data dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = [NSError new];
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:metOfficeData options:kNilOptions error:&error];
于 2015-05-01T15:40:54.003 に答える