UIAlertView 错误
Error with UIAlertView
我试图在按下按钮后弹出一个警告。我希望将艺术命名为 "Would you like to mine for materials" 并提供两个选项;是和不是。如果选择“是”,那么我希望实现这一点
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
}
}
您正在尝试显示两次警报。
设置第一个动作后去掉第一个self.present(alert, animated:true, completion:nil)
问题:
您调用两次 present(_:animated:completion:)
以在添加每个操作后显示警报控制器。
解决方法:
只需在添加动作后调用它一次,并在其处理程序中选择“是”动作后添加应执行的代码。
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)
我试图在按下按钮后弹出一个警告。我希望将艺术命名为 "Would you like to mine for materials" 并提供两个选项;是和不是。如果选择“是”,那么我希望实现这一点
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
}
}
您正在尝试显示两次警报。
设置第一个动作后去掉第一个self.present(alert, animated:true, completion:nil)
问题:
您调用两次 present(_:animated:completion:)
以在添加每个操作后显示警报控制器。
解决方法:
只需在添加动作后调用它一次,并在其处理程序中选择“是”动作后添加应执行的代码。
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)