2016-05-17 47 views
-2

有人知道爲什麼讓數據變爲零,並且我運行以下函數後收到消息「致命錯誤:意外地發現零,同時展開可選值」?常數在Swift中得到零值

let session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 

    request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type") 
    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

     let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)! 

     let codexxx = String(strData) 
     let serverResponse = ServerResponseHandler() 
     let number = serverResponse.removeCodeFromXML(codexxx) 
     let data = number.dataUsingEncoding(NSUTF8StringEncoding) 

     self.posts = [] 
     self.parser = NSXMLParser(data: data!) 
     self.parser.delegate = self 

     print ("NUMBER: \(number)") 

     let success:Bool = self.parser.parse() 
     if success { 
      print("parse success!") 
      } else { 
      print("parse failure!") 
     } 
     print("Response!: \(strData)") 
    }) 
    task.resume() 
} 

是否需要關閉才能關閉運行後的對象或函數?我在這裏真的很無能。

+0

你在哪一行出錯?你可以登錄嗎? – Alok

+0

'let strData = NSString(data:data !, encoding:NSUTF8StringEncoding)'的響應是什麼!' – Shubhank

+2

'completionHandler'有一個'error'參數。在處理'data'參數之前**總是**檢查是否有錯誤。 – vadian

回答

0

的completionHandler的data參數具有可選類型NData?(見docs),所以可能你需要檢查,如果它不是零展開了可選的!前或做這樣的事情:

... 
request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type") 
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
    if let data = data, strData = NSString(data: data, encoding: NSUTF8StringEncoding) { 
     let codexxx = String(strData) 
     // ... continue here 
    } else { 
     // there were no data received (either data or strData is nil) 
    } 
}) 
0

任何如果連接失敗,你會得到一個零數據對象。你應該總是檢查A.是否有錯誤對象,B.答覆的狀態碼是200.如果有錯誤,或者狀態碼不是200,那麼你可能甚至不需要看數據。