为什么我的登录功能出现此错误

时间:2015-08-10 08:05:57

标签: ios xcode swift completionhandler

我有一个登录功能,当用户有效时我没有问题,但当用户isvalid时我有这个错误

  

"由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]只能从主线程调用。"

这是我的代码。

@IBAction func login(sender: AnyObject) {
    var valid: Bool = false
    //activity.startAnimating()
    self.viewUtils.showActivityIndicator(self.view)
    username =  userField.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    password = passwordTextField.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

        if (self.username.isEmpty || self.password.isEmpty){
            self.showAlert("Inserte usuario password")
        }

        else{                   
            var user = UserFunction()
            user.userValid(self.username,password: self.password){ success in

                if success == true{
                    //self.activity.stopAnimating()
                    self.performSegueWithIdentifier("showTable", sender: self )
                }else{
                    println("me quedo aqui")
                    //self.activity.stopAnimating()
                    self.showAlert("usuario incorrecto")//ver porque no entra a usuario incorrecto

                }
           }
    }
}

func userValid(username :String, password : String, completionHandler:(Bool)->()){
    var valid: Bool!
    var resultados : Array<JSON> = []
    userBase64 = self.encodeToBase64(username)
    passBase64 = self.encodeToBase64(password)

    var api = ChannelsFunction()

    api.loadVideos("https://api.cxntv.com/api/v1/videos/?type=canales&page_size=100&ordering=-id"){results in


        if (results != nil){
            errorMessage = ""
            println("devuelvo true")
            api.saveLiveChannels(results!)
            self.saveUser(userBase64, passbase64: passBase64, username: username, password: password)
            completionHandler(true)
        }else{
            println("devuelvo false")
            completionHandler(false)
    }
    }
}

1 个答案:

答案 0 :(得分:2)

如果您正在与某些正在生成线程并在后台运行代码的API进行交互,那么您将在主线程上运行。

以这种方式在主线程中显示您的提醒:

dispatch_async(dispatch_get_main_queue()) {
    self.showAlert("usuario incorrecto")
}

或者如果您要更新任何其他UI,则必须在主线程中执行此操作,如上面的代码所示。

欲了解更多信息,请阅读以下帖子:GCD to perform task in main thread