Swift iOS:EXC_BAD_INSTRUCTION

时间:2014-06-11 23:05:34

标签: ios swift

在我的主ViewController中,我有这个:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    println("VIEW CONTROLLER DID APPEAR")

    var currentUser = PFUser.currentUser()
    println(currentUser)

    if (!currentUser) {
        self.presentLogInController()
    } else {
        println("VALID USER")
    }
}

当我运行应用程序时,此行会引发错误:

if (!currentUser) {

说EXC_BAD_INSTRUCTION

但是,输出窗口显示:

VIEW CONTROLLER DID APPEAR
<PFUser:TzzzzzzaHx:(null)> {
    email = "blah@blah.bla";
    username = mmm;
}
VALID USER

鉴于代码执行超出了XCode所说的导致EXC_BAD_INSTRUCTION的行,它看起来不像是一个严重的错误,尽管它会导致模拟器&amp;真正的设备崩溃。

有关如何调试的建议吗?

找到解决方案

if let user = PFUser.currentUser() {
    println("VALID USER")
    println(user)
    println(user["email"])
    println(user["completedTour"])
    if !user["completedTour"] {
        println("NO TOUR YET")
    }
} else {
    self.presentLogInController()
}

2 个答案:

答案 0 :(得分:3)

if (!currentUser) ... currentUserBool?不见得。您不能在Objective-C

中的if语句中使用非Bool表达式

假设PFUser.currentUser()返回一个隐式解包的可选项,您需要检查nil。

if currentUser != nil { ... }

答案 1 :(得分:1)

好像你正在处理一个像客观一样的快速问题。由于PFUser.currentUser()返回PFUser或nil,因此必须包含在可选变量中。

var currentUser = PFUser.currentUser()

然后,您可以使用if语句检查可选项是否包含值。

if currentUser {
    println("VALID USER")  
} else {
    self.presentLogInController()
}

如果要在if块中使用currentUser的值,则应使用if let语句。 if let user = currentUser {...}如果它有一个值,它将解包该可选项,以便您可以处理该值本身。