UIAlertView в Swift, получение EXC_BAD_ACCESS
Прежде всего, я вполне понимаю, что Xcode 6 и язык Swift находятся в бета-версии и подвержены ошибкам; однако этот конкретный кажется странным, поскольку все, что я пробовал до сих пор, кажется, работает нормально.
Если это не подходит для StackOverflow, я с радостью удалю вопрос.
Я начал играть с Xcode 6/Swift (готовясь к его выпуску), и это был необычайно приятный опыт по сравнению с тем, что я думал, что это будет. Тем не менее, одна проблема в портировании приложения стиля обучения, которое мне нравится делать, это то, что я не могу сгенерировать UIAlertView из-за EXC_BAD_ACCESS
данного кода:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
var alert = UIAlertView(title: "Title", message: "Message", delegate: nil, cancelButtonTitle: "OK") // EXC_BAD_ACCESS here
alert.show()
}
В строке, которая создает UIAlertView, я получаю EXC_BAD_ACCESS
, потому что [UIAlertView retain]
был вызван на освобожденный экземпляр.
Опять же, я делаю это на бета-баннере, но мне было любопытно, что я делаю что-то неправильно или кто-то другой сталкивался с подобными проблемами.
Ответы
Ответ 1
Попробуйте использовать следующий код
let alert = UIAlertView()
alert.title = "Title"
alert.message = "My message"
alert.addButtonWithTitle("Ok")
alert.show()
Но в iOS 8
UIAlertView
устарел. Поэтому используйте UIAlertController
с preferredStyle
of UIAlertControllerStyleAlert
. Это должно быть:
var alert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
Проверьте приведенный выше код, получаете ли вы такую же ошибку или нет?
Ответ 2
Из Xcode 6.0 Класс UIAlertView:
UIAlertView устарел. Использовать UIAlertController с предпочтительнымStyle вместо UIAlertControllerStyleAlert.
В быстром (iOS 8 и OS X 10.10) вы можете сделать это:
var alert = UIAlertController(
title: "Send",
message: "You have successfully send your feedback.",
preferredStyle: UIAlertControllerStyle.Alert
)
alert.addAction(UIAlertAction(
title: "Ok",
style: UIAlertActionStyle.Default,
handler: nil
))
self.presentViewController(alert, animated: true, completion: nil)
Ответ 3
2 вещи
u должен использовать делегат: self
cancelButtonTitle заканчивается на nil