如何在 iOS Objective-C 中使用 AFNetworking 库下载 .json 文件?

Posted

技术标签:

【中文标题】如何在 iOS Objective-C 中使用 AFNetworking 库下载 .json 文件?【英文标题】:How to download .json file using AFNetworking library in iOS Objective-C? 【发布时间】:2016-06-02 08:46:14 【问题描述】:

我是 ios 应用开发的新手。我被困在从亚马逊下载 .json 文件中。我在 *** 中引用了以下链接以及更多链接(Using AFNetworking to Download File in iOS、How to download the large amount of data using AFNetworking Library to show the better performance in ios?),但它们对我没有帮助。

我有一个扩展名为 .json 的文件,其中包含 json 结构化数据。在调用 URL 时,我想要文件的内容。我使用了 NSURLConnection 并且它有效。但我想使用 AFNetworking 使其工作。

NSURLConnection 工作代码:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://someamazon-url/folder/file.json"]];    NSURLConnection *connection;
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
  NSLog(@"response received");
  self.responseData = [[NSMutableData alloc] init];



-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

[self.responseData appendData:data];



-(void)connectionDidFinishLoading:(NSURLConnection *)connection
NSDictionary *results =[NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:nil];
NSLog(@"%@", results);

AFNetwork 代码不起作用:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; ///@"application/json"
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];

我知道上面的代码有一些错误。请指导我哪里出错了?上面的代码适用于所有其他 web 服务。但由于这是一个文件,我不明白错误是什么......请帮助......我已经尝试了很多,但没有任何工作

【问题讨论】:

在来自AFHTTPRequestOperationManagerGET: 方法中,是否出现错误?块叫什么? failure,那么error参数是什么意思? 抱歉没有发布错误信息:失败:^(AFHTTPRequestOperation *operation, NSError *error) NSLog(@"Error: %@", error); ];日志中的错误是:- NSUnderlyingError=0x16d8daf0 “请求失败:不可接受的内容类型:应用程序/xml” 您的错误取决于您的 json-server 的工作方式。有时您的服务器由于某些原因不接受您的请求。你能显示你的链接吗?我确定我可以通过您的链接使用AFNetworking 编写代码 【参考方案1】:

我找到了答案..

我尝试了下面的代码,它成功了,

NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://someamazon-url/folder/file.json"]];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
                                                       options:kNilOptions
                                                       error:nil];

我刚刚执行了这三行,它起作用了。但我不知道它的正确方法有多远。但在这种情况下,因为它只是一个文件,我认为它很好..

如果您认为这不是正确的方法,请发表评论..

【讨论】:

【参考方案2】:

替换此行[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

通过这个

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

仍然无法正常工作,然后从该特定 Web 服务的代码中删除以下行

manager.requestSerializer = [AFHTTPRequestSerializer serializer];

【讨论】:

以上是关于如何在 iOS Objective-C 中使用 AFNetworking 库下载 .json 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用Objective-C在iOS警报消息中添加换行符

IOS / Autolayout / Objective-C:在引用Storyboard中的元素的代码中创建约束

论如何在 Objective-C 中优雅的使用常量

如何在 Flutter 插件的 Swift 编写的 iOS 部分中使用 Objective-C 框架

如何在 Objective-C 中使用继承(iOS sdk)

如何在 iOS 的 Objective-C 中使用对齐区域编程拖放