【发布时间】:2016-10-04 02:22:52
【问题描述】:
由于 NSURLConnection 已被弃用,我需要转移到 NSURLSession。我有一个 URL 和一些需要作为 JSON 输入的数据。那么结果应该是 JSON 回来了。我看到这样的东西:
NSError *error;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *url = [NSURL URLWithString:@"[JSON SERVER"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys: @"TEST IOS", @"name",
@"IOS TYPE", @"typemap",
nil];
NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
[request setHTTPBody:postData];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
[postDataTask resume];
这是正确的方法吗?
我的要求是: 1. 将我的键值对转换为 JSON。 2. 将 URL 和 JSON 传递给可重用函数。 3. 获取返回的 JSON 数据。 4.解析返回的JSON数据。
【问题讨论】:
-
您不只是使用 Alamofire 有什么原因吗?它使网络变得非常简单。您是否尝试过上面的代码?它在工作吗?除了希望有人复制/粘贴您的代码并对其进行测试之外,您并没有真正提出真正的问题。至于“这是正确的方法吗?”我会成为一个聪明的亚历克,说不,迁移到 Swift :)
-
我觉得没问题。你有麻烦吗?在完成处理程序中执行步骤 3 和 4。考虑给这个代码出现的方法一个完成块,以便调用者可以异步获取结果。
-
我同意 danh。顺便说一句,如果您正在执行多个请求,我还鼓励您不要每次都实例化新的会话对象。实例化会话对象一次。另外,你真的在实现委托方法吗?如果没有,我将使用
sessionWithConfiguration进行实例化,而不使用delegate或delegateQueue,或者使用sharedSession。这取决于你。 -
如果您没有以任何方式修改会话配置并且您没有使用委托,您应该使用共享会话。这就是它的目的。基本上,它就像 NSURLConnection....
-
@danh 和 Rob 如果说我把它放在方法调用中创建块的语法是什么 - (void) getAPI?
标签: ios objective-c json ios9 nsurlsession