2

我有登录功能,当用户有效时我没有问题,但是当用户是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)
    }
    }
}
4

1 回答 1

2

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

以这种方式在主线程中显示您的警报:

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

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

有关更多信息,请阅读这篇文章:GCD 在主线程中执行任务

于 2015-08-10T08:14:41.693 回答