2015-07-09 63 views
0

在此行中:let task = self.session.venues.get(self.foursquareId!) {斯威夫特:意外發現零而展開的可選值(LLDB)

import UIKit 
import QuadratTouch 

class VenueDetailsViewController: UIViewController { 

    @IBOutlet var venueLabelName: UILabel! 

    var foursquareId:String? 
    var session: Session! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let task = self.session.venues.get(self.foursquareId!) { 
      (result) -> Void in 
      if result.response != nil { 
       if let venue = result.response!["venue"] as? JSONParameters { 
        if let venueName = venue["name"] as? String { 
         self.venueLabelName.text = venueName 
        } 
       } 
      } else { 
       // Show error. 
      } 
     } 
     task.start() 

    } 
} 

它拋出我

fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 
+0

把它放在一個if let命令中。它應該被解決 –

+0

如果foursquareId是零,則不會...只有當self.session.venues.get()函數接受可選值並返回一個可選值時,並且foursquareId不是強制解包。無論如何,在該行的開頭應該已經有了一個if。 – bryanm

+0

@bryanm foursquareId傳遞一個字符串,不是零。如果我在'task ='之前打印它,我可以看到它。 – Ryan

回答

1

要麼session爲零,或foursquareId爲零。由於session已隱式解開,因此它將在該行上引發錯誤,並且foursquaerId爲零。在嘗試像這樣訪問它們之前,您需要確保設置這些值。

+0

foursquareId不是零,因爲我可以看到它,如果我println()它。我認爲會議是罪魁禍首。我之前沒有設置會話嗎? 'var session:Session!'? – Ryan

+0

@Ryan不,你把它聲明爲一個隱式解包的可選變量。你基本上是說你會在它被使用之前設置它,但是實際上並沒有通過聲明它來設置它。 – bryanm

+0

啊我明白了。所以'var session:Session?',然後是'task = self.session!.venues.get()'是否會正確設置值? – Ryan

相關問題