Подтвердить что ты не робот

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] был вызван на освобожденный экземпляр.

Опять же, я делаю это на бета-баннере, но мне было любопытно, что я делаю что-то неправильно или кто-то другой сталкивался с подобными проблемами.

4b9b3361

Ответ 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