Swift 中的 UIAlertView,获取 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】Swift 中的 UIAlertView,获取 EXC_BAD_ACCESS【英文标题】:UIAlertView in Swift, getting EXC_BAD_ACCESS 【发布时间】:2014-06-04 05:34:51 【问题描述】:

首先,我很清楚 Xcode 6 和 Swift 语言处于 Beta 版并且容易出错;然而,这个特定的似乎有些奇怪,因为到目前为止我尝试过的所有其他方法似乎都工作正常。

如果这不适合 ***,我很乐意删除这个问题。

我已经开始使用 Xcode 6/Swift(准备发布),与我想象的相比,这是一次非常愉快的体验。话虽这么说,在移植我喜欢做的“培训”风格应用程序的一个问题是,由于EXC_BAD_ACCESS,我似乎无法生成 UIAlertView@ 有问题的代码是:

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]

再次,我将其归结为测试版横幅,但我很好奇我是否做错了什么,或者其他人是否遇到了类似问题。

【问题讨论】:

恕我直言,这是一个应该报告的错误。 @Sulthan 你不会碰巧知道在哪里报告 Swift 错误吗?我没有看到专门用于此的地方。 我在bugreport.apple.com找不到好的分类 【参考方案1】:

试试下面的代码

let alert = UIAlertView()
alert.title = "Title"
alert.message = "My message"
alert.addButtonWithTitle("Ok")
alert.show()

但在 ios 8 中

UIAlertView 已弃用。所以使用UIAlertControllerpreferredStyleUIAlertControllerStyleAlert。应该是:

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)

检查上面的代码,你是否得到同样的错误?

【讨论】:

好的,谢谢。两件事,第一点不是我会尝试的,而且效果很好。第二部分也不是我看过的东西(特别是 iOS 8,只是想加入 Swift)。有趣的信息。 我没有发现 UIAlertView 已被弃用的任何迹象。我看到 UIAlertController 仅适用于 iOS 8。事实上,当我在 Xcode 编辑器(或操场)中键入以下内容时,我没有收到过时的警告:let alert: UIAlertView = UIAlertView() 你能发布任何关于折旧的参考吗? 【参考方案2】:

来自 Xcode 6.0 UIAlertView 类:

UIAlertView 已弃用。将 UIAlertController 与首选样式一起使用 UIAlertControllerStyleAlert 代替。

在 swift(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 件事 你必须使用委托:自我 cancelButtonTitle 以 nil 结尾

【讨论】:

delegate 是一个可选类型 (UIAlertViewDelegate?),我想你的意思是 otherButtonTitles

以上是关于Swift 中的 UIAlertView,获取 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

swift中的警报错误[重复]

如何在 Swift 中创建 UIAlertView?

Swift 自定义 UIAlertView

swift UIAlertView.swift

Swift UIAlertView/UIActionSheet

如何在 Swift 中将 TextField 添加到 UIAlertView