2015-12-14 77 views
0

我試圖從我自己的API獲取數據。我可以在控制檯日誌中看到數據,但它一直給我發現無錯誤。NSURLSession:意外地發現零,同時展開一個可選值

繼承人我的代碼:

let request = NSMutableURLRequest(URL: NSURL(string: "linkHere")!) 
    request.HTTPMethod = "POST" 
    let postString = "sol=\(name)&sector=\(sector)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 
     do { 
      self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary 
     } catch let error as NSError{ 
     print("TEST Error \(error)") 
     } 

      if let parseJSON = self.json { 


      dispatch_async(dispatch_get_main_queue()) 
       { 

        let storyboard = UIStoryboard(name: "Main", bundle: nil) 

        let vc = storyboard.instantiateViewControllerWithIdentifier("detailView") as! detailViewController 
        let x = parseJSON["sector"] as! String 
        vc.secLab = x 
        self.presentViewController(vc, animated: true, completion: nil) 

      } 
     } 

    } 
    task.resume() 

在我的控制檯日誌中我可以看到數據見下圖:

enter image description here

我在做什麼錯?

+0

不知道我明白。你可以說得更詳細點嗎? – tmpz

+0

錯誤發生在哪一行? – mlidal

+0

哪條線墜毀? –

回答

4

基本上,在捕獲錯誤並僅打印後繼續執行「良好」代碼是一個糟糕的主意。

如果您在try分支中打開鑄造類型,則成功時它將成爲非可選類型,否則會捕獲相應的錯誤。

的語法應該看起來像

do { 
    self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as! [AnyObject] 
    dispatch_async(dispatch_get_main_queue()) 
    { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let vc = storyboard.instantiateViewControllerWithIdentifier("detailView") as! detailViewController 
     let dict = self.json[0] as! [String:AnyObject] 
     let x = dict["sector"] as! String 
     vc.secLab = x 
     self.presentViewController(vc, animated: true, completion: nil) 
    } 
} catch let error as NSError{ 
    print("TEST Error \(error)") 
} 
+0

感謝您的回答。學到了新東西!在應用您的更改並運行後,我收到以下錯誤:無法將類型'__NSCFArray'(0x4d927c)的值轉換爲'NSDictionary'(0x4d9394).'在'self.json = try'行。任何想法是什麼造成這種情況? – Skywalker

+0

Allesandro正確地提到json對象是一個數組而不是字典。您必須轉換爲「NSArray」或Swift類型並相應地檢索值。我更新了我的答案以尋找可能的解決方案 – vadian

+0

謝謝。我的錯誤應該已經適當地表達謝謝! – Skywalker

3

你已經投了JSON到可選的NSDictionary,但你的JSON響應是一個數組看方括號在你連接它的屏幕截圖。

+0

謝謝。我的錯誤應該已經適當地表達謝謝! – Skywalker

相關問題