2017-01-01 20 views
0

ボタンを押すと警告のポップアップを表示しようとしています。私は題材に「題材を探す」と題し、2つのオプションを挙げたい。はいといいえ。はいを選択した場合、これを実装したいUIAlertViewでエラーが発生しました。

Ironcnt.setvalue(forkey: "Iron")-3 

このオプションを選択しないと、警告表示が消えます。ここに私が書いたコードがあります。私はこれをシミュレータでテストしたところ、クラッシュしました。また、デバッガが言ったことのスクリーンショットを添付しました。

import UIKit 

let Ironcnt = UserDefaults.standard 
let Goldcnt = UserDefaults.standard 
let Fiveth = UserDefaults.standard 

let shipcnt = UserDefaults.standard 
let empirecnt = UserDefaults.standard 

var fiveth = Int() 
var iron = Int() 
var gold = Int() 
var ships = Int() 
var empires = Int() 

class one: UIViewController { 
    @IBOutlet weak var fiveth1: UILabel! 
    @IBOutlet weak var iron1: UILabel! 
    @IBOutlet weak var gold1: UILabel! 
    @IBOutlet weak var ships1: UILabel! 
    @IBOutlet weak var empire1: UILabel! 
    @IBOutlet weak var planet: UIImageView! 

@IBOutlet weak var webViewBG: UIWebView! 

@IBAction func emp(_ sender: Any) { 
    let alert = UIAlertController(title:"title", message:"this is an alert", preferredStyle:UIAlertControllerStyle.alert); alert.addAction(UIAlertAction(title:"action1",style: UIAlertActionStyle.default, handler:nil)); self.present(alert, animated:true, completion:nil) 
} 

@IBAction func mat(_ sender: Any) { 
    let alert = UIAlertController(title:"Would you like to mine for materials?", message:"This will cost you two Fiveth", preferredStyle:UIAlertControllerStyle.alert); 

    alert.addAction(UIAlertAction(title:"No", style: UIAlertActionStyle.default, handler:nil)); self.present(alert, animated:true, completion:nil) 

    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default , handler: nil)); 
     self.present(alert, animated:true, completion:nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let htmlPath = Bundle.main.path(forResource: "WebViewContent", ofType: "html") 
    let htmlURL = URL(fileURLWithPath: htmlPath!) 
    let html = try? Data(contentsOf: htmlURL) 

    self.webViewBG.load(html!, mimeType: "text/html", textEncodingName: "UTF-8", baseURL: htmlURL.deletingLastPathComponent()) 

    if (Fiveth.value(forKey: "Fiveth") != nil){ 
     fiveth = Fiveth.value(forKey: "Fiveth") as! NSInteger! 
     fiveth1.text = NSString(format: "Fiveth: %i", fiveth) as String 
    } 
    if (Ironcnt.value(forKey: "Ironcnt") != nil){ 
     iron = Ironcnt.value(forKey: "Ironcnt") as! NSInteger! 
     iron1.text = NSString(format: "Iron: %i", iron) as String 
    } 
    if (Goldcnt.value(forKey: "Goldcnt") != nil){ 
     gold = Goldcnt.value(forKey: "Goldcnt") as! NSInteger! 
     gold1.text = NSString(format: "Gold: %i", gold) as String 
    } 
} 

enter image description here

答えて

3

問題

あなたが行動のそれぞれを追加した後に、警告コントローラを提示する2回present(_:animated:completion:)を呼び出します。

ソリューション

は一度だけのアクションを追加した後、それを呼び出し、そのハンドラでYESのアクションを選択した後に実行する必要がありますあなたのコードを追加します。

let alert = UIAlertController(title: "Would you like to mine for materials?", message: "This will cost you two Fiveth", preferredStyle: .alert) 
let noAction = UIAlertAction(title: "No", style: .default, handler: nil) 
let yesAction = UIAlertAction(title: "Yes", style: .default) { _ in 
    // here you can add your code which should be executed after choosing the yes action 
    Ironcnt.setvalue(forkey: "Iron")-3 
} 

alert.addAction(noAction) 
alert.addAction(yesAction) 
present(alert, animated: true, completion: nil) 
1

あなたは二度の警告を提示しようとしています。 最初の操作を設定した後、最初のself.present(alert, animated:true, completion:nil)を削除します。

関連する問題