Ios UIAlertView操作未迅速发生

Ios UIAlertView操作未迅速发生,ios,swift,uialertview,Ios,Swift,Uialertview,我的应用程序中有一个登录页面。用户输入用户名和密码。我有一个API,它告诉我用户名和密码是否正确,用户id是否正确。如果它们不正确,则会显示UIAlertView(),询问您是否要创建帐户。视图有两个按钮。一个“否”按钮用于关闭视图,另一个“是”按钮用于联系API以创建用户帐户。我以前创建过警报操作,但它不能与下面的代码一起使用。如果你不介意的话,请你看一下,帮我诊断一下这个问题好吗 // // File.swift // Reading Logs // // Created by And

我的应用程序中有一个登录页面。用户输入用户名和密码。我有一个API,它告诉我用户名和密码是否正确,用户id是否正确。如果它们不正确,则会显示UIAlertView(),询问您是否要创建帐户。视图有两个按钮。一个“否”按钮用于关闭视图,另一个“是”按钮用于联系API以创建用户帐户。我以前创建过警报操作,但它不能与下面的代码一起使用。如果你不介意的话,请你看一下,帮我诊断一下这个问题好吗

//
//  File.swift
//  Reading Logs
//
//  Created by Andrew on 12/8/15.
//  Copyright © 2015 Wilson Apps for Education. All rights reserved.
//

import UIKit

class UserLogin {

var loginAlert = UIAlertView()
    var user: String = ""
    var pass: String = ""

    func checkLogin() -> Bool{
    let defaults = NSUserDefaults.standardUserDefaults()
    let stat = defaults.valueForKey("loggedIn")
    if(String(stat!) == "0"){
        return false
    }else{
        return true
    }
}


    func logout(){
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setValue("0", forKey: "loggedIn")
        defaults.setValue("", forKey: "logKey")
        defaults.setValue("0", forKey: "userKey")
    }

    func login(username username: String, password: String, completion: (result: String) -> Void){
        self.user = username
        self.pass = password
        let url = "http://www.wilsonfamily5.org/rlog/checkLogin.php?u=\(username)&p=\(password)"
        let nsUrl = NSURL(string:url)
        let nsUrlRequest = NSURLRequest(URL: nsUrl!)
        NSURLSession.sharedSession().dataTaskWithRequest(nsUrlRequest){
            (data, response, error) in
            guard
                let data = data,
                let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
                else { return }
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                if(contents as String == "0"){
                    self.loginAlert = UIAlertView(title: "No Account Found", message: "We did not find an account matching that criterea. Do you want us to create you an account?", delegate:nil, cancelButtonTitle: "No")
                    self.loginAlert.addButtonWithTitle("Yes")
                    self.loginAlert.show()
                }else{
                    let defaults = NSUserDefaults.standardUserDefaults()
                    defaults.setValue(contents as String, forKey: "userKey")
                    defaults.setValue("1", forKey: "loggedIn")
                    completion(result: "1")

                }
            })
            }.resume()
    }

    func register(username: String, password: String){
        let url = "http://www.wilsonfamily5.org/rlog/newAccount.php?u=\(username)&p=\(password)"
        let nsUrl = NSURL(string:url)
        let nsUrlRequest = NSURLRequest(URL: nsUrl!)
        NSURLSession.sharedSession().dataTaskWithRequest(nsUrlRequest){
            (data, response, error) in
            guard
                let data = data,
                let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
                else { return }
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                let defaults = NSUserDefaults.standardUserDefaults()
                defaults.setValue(contents as String, forKey: "userKey")
                defaults.setValue("1", forKey: "loggedIn")
            })
            }.resume()
    }

    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
        print("ButtonClicked")
        if(buttonIndex == 1){
            print("1ButtonClicked")
            register(user, password: pass)
        }
    }



}

您需要设置委派,以便接收警报和回调:

 self.loginAlert = UIAlertView(title: "No Account Found", message: "We did not find an account matching that criterea. Do you want us to create you an account?", delegate:self, cancelButtonTitle: "No"

您应该使用UIAlertViewController而不是UIAlertView,因为

iOS 9中不推荐使用UIAlertView

这是一个用Swift编写的UIAlertController代码,使用起来非常简单。主要的是它是基于块的,不需要使用任何委托

let alertController = UIAlertController(title: "Default AlertController", message: "A standard alert", preferredStyle: .Alert)

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action:UIAlertAction!) in
            println("you have pressed the Cancel button");
 }
   alertController.addAction(cancelAction)

let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
            println("you have pressed OK button");
 }
   alertController.addAction(OKAction)

  self.presentViewController(alertController, animated: true, completion:nil)

步骤1

UIAlertViewDelegate
添加到您的类中

class UserLogin, UIAlertViewDelegate {
....
步骤2

设置委托并执行“是”按钮
loginAlert
object

self.loginAlert = UIAlertView(title: "No Account Found", message: "We did not find an account matching that criterea. Do you want us to create you an account?", delegate: self, cancelButtonTitle: "No", otherButtonTitles: "Yes")
self.loginAlert.show()

现在,
点击按钮Index
功能将被触发。

+Taier现在我添加后,它给了我一个错误的访问代码that@AndrewWilson它是否出现在AlcVIEWS:CLICKEDButoNATTHORD?如果使用IOS 8或更高版本,请考虑使用<代码> UIAlertController <代码>…code>UIAlertView现在已被弃用…@Taier No.它没有输出“ButtonClicked”@AndrewWilson我看到了您的错误消息,看起来您把东西放在了彼此的内部,现在UILabel(我猜是根类)是您的(self),在运行时,它没有实现AlertView委托:(我不能这样做,因为我的应用程序也在iOS 7上运行。我测试了你的loginAlert UIAlertView变量,它对我正常工作。可能你的if语句不正确。如果你提供了错误的密码和用户名,请检查内容字符串。@GyorgyTrum它不是if语句,因为我在那里添加了一个断点,它仍然存在。)给了我错误。