廢話不說,直接說錯誤的原因
這是我的代碼
dispatch_async( dispatch_get_global_queue(0, 0), ^{
NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:[NSURL URLWithString:@"http://api.breadtrip.com/hunter/products/more/?city_name=北京&lat=40.02935864560207&lng=116.337422268&sign=eb90993b3a68c75dadaacb4a9aa00c3b&start=0"] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
id anyObject = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:location] options:NSJSONReadingAllowFragments error:&error];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"anyObject:%@",anyObject);
NSLog(@"error:%@",error);
});
}];
[task resume];
});
我這是使用 NSURLSession 來請求網絡,返回 JSON 格式的數據,從寫法上來看應該是沒有問題的,但是一運行程序就會崩潰.

屏幕快照 2016-01-12 22.45.12.png
這是崩潰日志
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'
解決思路:
1.通過打斷點的方式來調試程序:

屏幕快照 2016-01-12 22.52.20.png
這是會發(fā)現(xiàn)當走到 53行代碼的時候程序直接崩潰,于是查看virables View 變量打印區(qū)域
2.發(fā)現(xiàn)犯了一個低級錯誤,將 URL 中帶有中文的鏈接直接在編譯器中請求,如圖:提示不支持的 URL .
但是這種帶有中文的 URL 在瀏覽器中是能直接打開的,但是 Xcode 不支持.

屏幕快照 2016-01-12 22.54.27.png
3.解決方法:
將 URL 中含有中文的參數拼接成非中文的類型,這里只介紹一種方法,將中文通過百分號轉碼的方式,轉為系統(tǒng)能夠識別的 URL ,格式:%E5%8C%97%E4%BA%AC
NSString *u = @"北京";
NSString *e = [u stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet controlCharacterSet]];
NSLog(@"%@",e);
4.在將這個變量拼接到 URL 的參數中對應的位置即可.