AFNetworking 默默无闻
Posted
技术标签:
【中文标题】AFNetworking 默默无闻【英文标题】:AFNetworking Silently Does Nothing 【发布时间】:2012-01-15 01:00:24 【问题描述】:我确信我对 ios 编程很陌生,但是,我遇到了 AFNetworking 的问题。具体来说,当我使用它时,什么也没有发生。我没有从服务器得到任何响应,但是,我也没有收到任何错误。所有属性最终都为 NULL。
这是我的要求:
NSMutableDictionary *requestArray = [NSMutableDictionary new];
[requestArray setObject: @"getBio"
forKey: @"action"];
[requestArray setObject: @"1"
forKey: @"bioID"];
NSError * error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:requestArray options:0 error:&error];
NSString *myRequestString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: @"http://localhost/LP/JSON/Secure/bio.php" ] ];
[ request setHTTPMethod: @"POST" ];
[ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[ request setHTTPBody: [myRequestString dataUsingEncoding:NSUTF8StringEncoding]];
如果我只是将请求传递给 UIWebView 或者如果我使用它,这似乎可以工作,因为我得到了我的预期结果:
NSURLResponse *response;
NSError *err;
NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
NSLog(@"responseData: %@", content);
也就是说,POST 成功,返回 JSON。
但是,这些都没有做任何事情(没有错误,没有响应):
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
NSLog(@"Data: %@ %@", [JSON valueForKeyPath:@"firstName"], [JSON valueForKeyPath:@"lastName"]);
failure:nil];
即使是简单的骨头也没有尝试工作:
AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request];
显然,我做错了什么。但是,无声的失败使这很难弄清楚。
感谢您的帮助。
编辑:
没关系..我很密集。
没有创建 NSOperationQueue。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
虽然,我仍然不清楚为什么没有设置属性。但是,看起来我至少有数据。
【问题讨论】:
【参考方案1】:创建请求操作对象不会自动启动请求。就像您在编辑中指出的那样,您可以将其排入NSOperationQueue
或手动执行[operation start]
。
我建议您使用AFHTTPClient
与您的服务器通信,因为它提供了一种内置机制,可以根据您传入的参数正确设置您的查询字符串或 HTTP 正文。请参阅 Gowalla API 示例客户端示例代码,以及方法AFHTTPClient -postPath:parameters:success:failure
。
【讨论】:
以上是关于AFNetworking 默默无闻的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking:如何知道响应是不是使用缓存? 304 或 200
如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书