2015-06-14 79 views
3

雨燕2.0更新之前,此代碼後工作完全從一個PHP腳本的服務器下載我的JSON文件:NSURLConnection的拋出更新到雨燕2.0

let url = NSURL(string: webAdress) 
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData 
var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 5.0) 

var response: NSURLResponse? = nil 
var error: NSError? = nil 
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error) 

後更新的Xcode要求我做一些改變。我做了,代碼沒有錯誤,但它總是拋出...

let url = NSURL(string: webAdress) 
    let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData 
    let request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 5.0) 

    var response: NSURLResponse? = nil 
    var reply = NSData() 
    do { 
    reply = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response) 
    } catch { 
     print("ERROR") 
    } 

期待您的解決方案!

+3

打印出來的錯誤?你可以在捕獲物內找到它。 – Rob

+0

print(error)會這樣做 - 不需要聲明一個錯誤變量(只是爲你澄清Rob)。看到我的答案爲Swifty的方式! – Sidetalker

回答

6

下面是使用新的NSURLSession一個例子 - 顯然NSURLConnection的已棄用iOS中9

let url = NSURL(string: webAddress) 
let request = NSURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0) 

let session = NSURLSession.sharedSession() 

session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
    print(data) 
    print(response) 
    print(error) 
})?.resume() 

我認爲這是超級乾淨,有它只是沒有太多的文檔。讓我知道如果你有任何麻煩得到這個工作。

+0

感謝您的回覆。這是我對你的代碼的輸出: '零 零 可選(錯誤域= NSURLErrorDomain代碼= -1002 「URL nichtunterstützt」 的UserInfo = {0x1567d8b00 = NSUnderlyingError 0x1567a8c00「明鏡Vorgang konnte nicht abgeschlossen werden(kCFErrorDomainCFNetwork-Fehler -1002 。「),NSErrorFailingURLStringKey = www.' _(...)_'.php,NSErrorFailingURLKey = www.' _(...)_'.php,NSLocalizedDescription = URL nichtunterstützt})' –

+0

你知道嗎?可能? –

+0

數據和響應爲零,因爲您有錯誤。錯誤在那裏被定義爲可選的(就像數據和響應一樣),所以如果你想使用任何信息,你必須打開它。你得到的錯誤1002對應於NSURLErrorUnsupportedURL,通常是由於缺少http://導致的。但是,這不是這種情況 - 我會看看這個錯誤。 – Sidetalker

1

馬克西米利安喜, 我有同樣的未解問題,通過使用Sidetalker是NSURLSession.dataTaskWithRequest不是你在尋找什麼,因爲NSURLSession API是高度異步建議的解決方案(與蘋果的文檔根據)和你的代碼已經在實施swift 1.2是同步的。另一方面,另一方面,NSURLConnection在iOS 9中已被棄用,因此您編寫的代碼可能不會構建,對不對?

我建議的解決辦法是:

let url = NSURL(string: webAdress) 
let request: NSURLRequest = NSURLRequest(URL: url!) 
let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
let session = NSURLSession(configuration: config) 
var responseCode = -1 
let group = dispatch_group_create() 
dispatch_group_enter(group) 
session.dataTaskWithRequest(request, completionHandler: {(_, response, _) in 
if let httpResponse = response as? NSHTTPURLResponse { 
    responseCode = httpResponse.statusCode 
} 
dispatch_group_leave(group) 
})!.resume() 
dispatch_group_wait(group, DISPATCH_TIME_FOREVER) 
//rest of your code... 

請讓我知道如果現在確定