class func parseJSONData(data: AnyObject?) ->NSArray? {//将json转化为NSArray
do{
let downloadData=data as? NSData
let jsonObject = try NSJSONSerialization.JSONObjectWithData(downloadData!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
return jsonObject
}catch{
}
return nil
}
class func request(urlString urlString: String?,completion: (data: NSArray?) -> Void){//异步网络请求获取json
if urlString == nil {
dispatch_async(dispatch_get_main_queue(),{ () -> Void in
print("urlString 为空")
completion(data: nil)
})
}
let url = NSURL(string: urlString!)//获取json的url
let request = NSURLRequest(URL: url!)
let queue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request, queue: queue) {
(response, data, error) -> Void in
let httpResponse = response as? NSHTTPURLResponse
let code=httpResponse?.statusCode
if code==200{
let parseData = self.parseJSONData(data)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(data: parseData)//将json转化为NSArray后返回.
})
}else{
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print(error)
// 请求出现,则返回nil对象表示
completion(data: nil)
})
}
}
}
由于ios9.0以后引入了http传输安全协议,所以只支持https请求,要使用http请求,需要在info.plist中的添加如下代码:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>调用request获取到NSArray之后,遍历得到其中的数据.
HttpRequest.request(urlString: url) { (data) -> Void in
if data == nil {
let alertView = UIAlertView()
alertView.title = "温馨提示"
alertView.message = "加载失败"
alertView.addButtonWithTitle("确定")
alertView.addButtonWithTitle("取消")
alertView.show()
}else {
let itemArray = data
for (var i = 0 ; i < itemArray!.count ; i++){
NSLog(itemArray![i].valueForKey("keyName")!.description, "debug")}}}
本文详细介绍了iOS开发中如何进行异步网络请求获取JSON数据,并通过自定义函数将其转换为NSArray对象的过程。重点阐述了在iOS 9.0及以上版本中引入的HTTPS安全协议对HTTP请求的影响,以及如何在Info.plist文件中添加相关配置来支持HTTP请求。同时,文章演示了如何遍历并处理解析后的JSON数据,确保开发者能够有效地利用这些数据进行后续操作。
41

被折叠的 条评论
为什么被折叠?



