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
已弃用。所以使用UIAlertController
和preferredStyle
的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)
检查上面的代码,你是否得到同样的错误?
【讨论】:
好的,谢谢。两件事,第一点不是我会尝试的,而且效果很好。第二部分也不是我看过的东西(特别是 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的主要内容,如果未能解决你的问题,请参考以下文章