5

有人吗?):我有一个问题让我在过去的 2 个小时里摸不着头脑,这很可能是我错过的一个非常简单的愚蠢事情。当我从操作@AFNetworking 调用响应字符串时,我不断收到构建错误......就像没有这样的财产......

请看一下我的代码并解释一下我这次搞砸了什么:p .. 谢谢 :)


NSDictionary* paramDict = [NSDictionary dictionaryWithObjectsAndKeys:WebServicemd5Value, WebSermd5Variable, nil]
;
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:webServiceURL]];

[httpClient defaultValueForHeader:@"Accept"];

[httpClient postPath:@"method" parameters:paramDict success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response data: %@", responseObject);
    NSLog(@"Reponse String: %@", operation);

// 打印操作会显示操作字典,包括响应字段,// 但是当我直接调用 operation.response 时,编译器不会构建,说明 // “AFHTTPRequestOperation 找不到属性”.... WEIRDEST永远的事,对吧?

    NSString* responseString = [NSString stringWithUTF8String:[responseObject bytes]];
    //.. Rest o f my Code....

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

3 回答 3

15

Hernan,如果您期望NSDictionary来自 JSON 响应,您应该考虑使用AFJSONRequestOperation,因为您在成功回调中获得了 JSON 字典。无论如何,如果您想从 中获取字典,请responseObject尝试使用以下代码:

NSError *error = nil;
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error];
if (error) {
    NSLog(@"Error serializing %@", error);
}
NSLog(@"Dictionary %@", JSON);
于 2012-12-13T08:16:09.507 回答
5

我相信响应字符串在“操作”对象内,所以类似于:

...
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error retrieving data: %@", operation.responseString);
}];
于 2014-04-03T07:35:49.940 回答
4

在尝试使用 AFNetworking 从 meetup.com api 检索内容时(感谢 Mattt T. 的出色框架,顺便说一句),遇到了同样的错误 - “操作无法完成。(Cocoa 错误 3840)”。意识到我遇到的问题是包含瑞典字符“Ø”的响应数据,导致解析错误。解决方案是在 AFNetworking 客户端的初始化中包含标头“Accept-Charset: utf-8”。固定的!

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];

    // Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
    [self setDefaultHeader:@"Accept" value:@"application/json"];
    [self setDefaultHeader:@"Accept-Charset" value:@"utf-8"];

    return self;
}
于 2013-02-19T19:23:31.960 回答