xcode 8 中的 UILabel 数据到 UIAlert 问题,错误

UILabel data to UIAlert issue in xcode 8, error

我发出了警报,并尝试遵循教程并将其放入我的代码中。我把代码放在几个不同的地方,但错误越来越严重。我最后只是把它放在底部,因为那是我最终得到最少错误的地方。我是 xcode 的新手,所以这个非常基本的东西对我来说很难。此外,当我把它放进去时,到处都是错误,我不知道如何解决这个问题。此外,我想要做的是获取保存在我的 UILabel 中的数据,这是一个名称,我希望它显示在 "dismisses" 警报的警报的可点击部分,但我当我无法在我的代码中添加基本警报时,我不知道该怎么做,甚至不知道如何开始。任何帮助都将是更好的源代码。抱歉有这些问题。再次感谢。

import UIKit
import MultipeerConnectivity


class ViewController: UIViewController, MCBrowserViewControllerDelegate {

@IBOutlet weak var input: UITextField!

@IBOutlet weak var output: UILabel!

@IBAction func action(_ sender: Any) {
    output.text = input.text
    UserDefaults.standard.set(input.text, forKey: "MyName")
    input.text = ""
}

var currentPlayer:String!

var appDelegate:AppDelegate!

override func viewDidLoad() {
    super.viewDidLoad()
    appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.MPCHandler.setupPeerWithDisplayName(UIDevice.current.name)
    appDelegate.MPCHandler.setupSession()
    appDelegate.MPCHandler.advertiseSelf(true)

    NotificationCenter.default.addObserver(self, selector: Selector(("peerChangedStateWithNotification:")), name: NSNotification.Name(rawValue: "MPC_DidChangeStateNotification"), object: nil)

    NotificationCenter.default.addObserver(self, selector: Selector(("handleReceivedDataWithNotification:")), name: NSNotification.Name(rawValue: "MPC_DidReceiveDataNotification"), object: nil)
}

@IBAction func connect(_ sender: Any) {

    if appDelegate.MPCHandler.session != nil{
        appDelegate.MPCHandler.setupBrowser()
        appDelegate.MPCHandler.browser.delegate = self

        self.present(appDelegate.MPCHandler.browser, animated: true, completion: nil)

    }
}

func peerChangedStateWithNotification(notification:NSNotification){
    let userInfo = NSDictionary(dictionary: notification.userInfo!)

    let state = userInfo.object(forKey: "state") as! Int

    if state != MCSessionState.connecting.rawValue{
        self.navigationItem.title = "Connected"
    }

}

func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
    appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
}

func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
    appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewDidAppear(_ animated: Bool) {
    if let x = UserDefaults.standard.object(forKey:"myName") as?
        String
    {
        output.text = x
    }
}

}


 func viewDidAppear(_animated: Bool) {
createAlert(title: "HI", message: "ARE YOU READY")

}

 func createAlert (title: String, message:String)
{


let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

alert.addAction(UIAlertAction(title: "HI", style: UIAlertActionStyle.default, handler: { (action) in alert.dismiss(animated: true, completion: nil);))

    self.present(alert,animated: true, completion:nil)

}
}

您最有可能得到的错误是 Invalid redeclaration of 'viewDidAppear' 意味着您正试图在 ViewController 中添加两次 viewDidAppear 方法。因此,从您的代码中删除下面的一种方法,并在已经存在的 viewDidAppear 中调用 createAlert

你的第二个错误是你忘记为 UIAlertActionHandler 添加 } 并且不需要在警报操作上调用 dismiss 它会自动关闭警报。

您还需要将选择器语法更改为 Swift3,而且您忘记在代码中添加 handleReceivedDataWithNotification

现在 Swift 使用 Swift 本机字典类型而不是 NSDictionary,因此请将您的控制器更改为以下一种以获得所需的输出。

class ViewController: UIViewController, MCBrowserViewControllerDelegate {

    @IBOutlet weak var input: UITextField!

    @IBOutlet weak var output: UILabel!      

    var currentPlayer:String!

    var appDelegate:AppDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()
        appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.MPCHandler.setupPeerWithDisplayName(UIDevice.current.name)
        appDelegate.MPCHandler.setupSession()
        appDelegate.MPCHandler.advertiseSelf(true)

        NotificationCenter.default.addObserver(self, selector: #selector(peerChangedStateWithNotification(_:)), name: NSNotification.Name(rawValue: "MPC_DidChangeStateNotification"), object: nil)

        NotificationCenter.default.addObserver(self, selector: #selector(handleReceivedDataWithNotification(_:)), name: NSNotification.Name(rawValue: "MPC_DidReceiveDataNotification"), object: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func connect(_ sender: Any) {

        if appDelegate.MPCHandler.session != nil{
            appDelegate.MPCHandler.setupBrowser()
            appDelegate.MPCHandler.browser.delegate = self

            self.present(appDelegate.MPCHandler.browser, animated: true, completion: nil)

        }
    }

    @IBAction func action(_ sender: Any) {
        output.text = input.text
        UserDefaults.standard.set(input.text, forKey: "MyName")
        input.text = ""
    }

    func peerChangedStateWithNotification(_ notification: Notification) {
        let userInfo = notification.userInfo!

        let state = userInfo["state"] as! Int

        if state != MCSessionState.connecting.rawValue{
            self.navigationItem.title = "Connected"
        }

    }

    func handleReceivedDataWithNotification(_ notification: Notification) {
        let userInfo = notification.userInfo!
        print(userInfo)
    }

    func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
        appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
    }

    func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
        appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
    }

    override func viewDidAppear(_ animated: Bool) {
        if let x = UserDefaults.standard.string(forKey: "myName") {
            output.text = x
        }
        else {
            output.text = "Default Name" //Set here default Name
        }
        self.createAlert(title: "HI", message: "ARE YOU READY")
    }

    func createAlert (title: String, message:String)
    {
        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: output.text, style: UIAlertActionStyle.default, handler: { (action) in

        }))
        self.present(alert,animated: true, completion:nil)
    }
}
import UIKit
import MultipeerConnectivity


class ViewController: UIViewController, MCBrowserViewControllerDelegate {

@IBOutlet weak var input: UITextField!

@IBOutlet weak var output: UILabel!

@IBAction func dick(_ sender: Any) {
    output.text = input.text
    UserDefaults.standard.set(input.text, forKey: "MyName")
    input.text = ""
}

var currentPlayer:String!

var appDelegate:AppDelegate!

override func viewDidLoad() {
    super.viewDidLoad()
    appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.MPCHandler.setupPeerWithDisplayName(UIDevice.current.name)
    appDelegate.MPCHandler.setupSession()
    appDelegate.MPCHandler.advertiseSelf(true)

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.peerChangedStateWithNotification(_:)), name: NSNotification.Name(rawValue: "MPC_DidChangeStateNotification"), object: nil)

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.handleReceivedDataWithNotification(_:)), name: NSNotification.Name(rawValue: "MPC_DidReceiveDataNotification"), object: nil)
}

@IBAction func connect(_ sender: Any) {

    if appDelegate.MPCHandler.session != nil{
        appDelegate.MPCHandler.setupBrowser()
        appDelegate.MPCHandler.browser.delegate = self

        self.present(appDelegate.MPCHandler.browser, animated: true, completion: nil)

    }
}

@IBAction func action(_ sender: Any) {
    output.text = input.text
    UserDefaults.standard.set(input.text, forKey: "MyName")
    input.text = ""
}

func peerChangedStateWithNotification(_ notification: Notification) {
    let userInfo = notification.userInfo!

    let state = userInfo["state"] as! Int

    if state != MCSessionState.connecting.rawValue{
        self.navigationItem.title = "Connected"
    }

}

func handleReceivedDataWithNotification(_ notification: Notification) {
    let userInfo = notification.userInfo!
    print(userInfo)
}

func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
    appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
}

func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
    appDelegate.MPCHandler.browser.dismiss(animated: true, completion: nil)
}
*func viewdidloadOverride; func viewDidAppear*(_ animated: Bool) {
    if let x = UserDefaults.standard.string(forKey: "myName") {
        output.text = x
    }
    else {
        output.text = "x" //Set here default Name
    }
    self.createAlert(title: "HI", message: "ARE YOU READY")
}

func createAlert (title: String, message:String)
{
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title: output.text, style: UIAlertActionStyle.default, handler: { (action) in

    }))
    self.present(alert,animated: true, completion:nil)
}

}