Ios Swift-不继续执行方法

Ios Swift-不继续执行方法,ios,swift,firebase,Ios,Swift,Firebase,我在VC中开发了三个函数,如下所示: CheckUserName或MailTake(..) 支票已收(…) CheckUsernameTaked(…) 第一个,即CheckUsernameOreMailtake,调用自身内的其他两个,并通过完成返回一个结果,指示采用哪一个(基于int值,其中1=采用电子邮件,2=采用用户名)。代码如下: func checkUsernameOrEmailTaken(username: String, email:String, completion: (resu

我在VC中开发了三个函数,如下所示:

  • CheckUserName或MailTake(..)
  • 支票已收(…)
  • CheckUsernameTaked(…)
  • 第一个,即CheckUsernameOreMailtake,调用自身内的其他两个,并通过完成返回一个结果,指示采用哪一个(基于int值,其中1=采用电子邮件,2=采用用户名)。代码如下:

    func checkUsernameOrEmailTaken(username: String, email:String, completion: (result: Int) -> Void)
        {
            /*This function checks the result of both functions, checkEmailTaken and checkUsernameTaken*/
            /*
                return 1 = email is taken
                return 2 = username is taken
            */
            var inputTaken:Int = 0
            print("Inside CheckUsernameOrEmailTaken")
            self.checkEmailTaken(email, completion: { (result)->Void in
                print("Finish Checking Email Taken")
                if(result == true)
                {
                    /*Email is taken*/
                    print("Email Taken")
                    inputTaken = 1
                    completion(result: inputTaken)
                }else{
                    /*Email not taken*/
                    print("Email Available")
                    self.checkUsernameTaken(username, completion: { (result)->Void in
                        if(result == true)
                        {
                            inputTaken = 2
                            completion(result: inputTaken)
                        }else{
                            completion(result: 0)
                        }
                    })
                }
    
            })
    
        }
    
        func checkEmailTaken(email:String, completion: (result: Bool) -> Void)
        {
            print("Inside CheckEmailTaken")
            //let reference = Firebase(url:"https://something.firebaseio.com/users/")
            reference.queryOrderedByChild("email").queryEqualToValue("\(email)").observeEventType(.ChildAdded, withBlock: { snapshot in
                if (snapshot.value["email"] != nil) {
                    print("Inside CheckEmailTaken ---- Taken")
                    completion(result: true)
                }else{
                    print("Inside CheckEmailTaken ----- Available")
                    completion(result: false)
                }
            })
        }
    
        func checkUsernameTaken(username: String, completion: (result: Bool) -> Void)
        {
            //let reference = Firebase(url:"https://something.firebaseio.com/users/")
            reference.queryOrderedByChild("username").queryEqualToValue("\(username)").observeEventType(.ChildAdded, withBlock: { snapshot in
                if (snapshot.value["username"] != nil) {
                    completion(result: true)
                }else{
                    completion(result: false)
                }
            })
        }
    
    在执行之前,我有很多print语句需要知道。我只在控制台中:

    Inside CheckUsernameOrEmailTaken
    Inside CheckEmailTaken
    
    我有一个进度微调器,它不会因为调用没有继续而消失。它似乎在继续执行,但没有显示任何操作。在后端,我有

    ->users
      ->6dd077ac-dsds-4060-ac4f-dsdsdsdsdsds1
     email: "kleina@outlook.com"
     mobile: "32322332"
     name: "Kleina"
     username: "someone"
    

    我在文本字段中输入的是不同的电子邮件,但用户名相同,即某人…并且它一直在运行。如果我尝试测试电子邮件是否存在,它会工作并显示电子邮件已被接收。请让我知道哪里出了错…我使用Firebase编写的第一个函数。

    请在Firebase查询中插入错误块,以查看是否存在错误翁:

    ref.observeEventType(.Value, withBlock: { snapshot in
        println(snapshot.value)
    }, withCancelBlock: { error in
      println(error.description)
    })
    

    当没有连接到db时,您也应该会出现错误。

    我会设置一个断点并逐步检查代码以查看挂起的位置。Firebase连接是否成功建立?@blacksheep_2011如何检查它?正如我所说的第一个真正适合我的代码,您需要学习如何使用Xcode调试器,它允许您设置断点并在运行时逐步检查代码,以查看变量的值,以便调试逻辑问题和崩溃。我建议您遵循教程:@robotcat谢谢您的建议,尽管您假设不知道如何使用它。添加了错误块…但它仍然没有继续到那里…它只显示相同的内容打印原始帖子中的语句。您是否尝试设置断点并单步执行代码?将尝试在位置之间移动一点,让您知道我使用了断点,并且它到达了引用。queryOrderedByChild(“电子邮件”)。queryQualtOvalue(“电子邮件”)然后跳到withCancelBlock,但从不打印其中的内容作为错误值?将断点设置为println行,然后在控制台中键入
    po error