Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建UIAlertView的第二次调用时UIView崩溃_Ios_Iphone_Swift_Ios7 - Fatal编程技术网

Ios 创建UIAlertView的第二次调用时UIView崩溃

Ios 创建UIAlertView的第二次调用时UIView崩溃,ios,iphone,swift,ios7,Ios,Iphone,Swift,Ios7,我在自定义视图中遇到了一个奇怪的崩溃。它是一个简单的调试面板,带有一个按钮,用于创建UIAlertView以获取字符串。XIB将UIButton链接到clickInside上的iAction,UITextView通过outlet链接到mDebugText 视图控制器在第一次一切正常时实例化视图。我可以按下按钮,Alertview弹出,我可以键入并关闭它。没问题 但是,如果my view controller删除/销毁了DebugView,并在按下按钮后创建了一个新的DebugView,则应用程序

我在自定义视图中遇到了一个奇怪的崩溃。它是一个简单的调试面板,带有一个按钮,用于创建UIAlertView以获取字符串。XIB将UIButton链接到clickInside上的iAction,UITextView通过outlet链接到mDebugText

视图控制器在第一次一切正常时实例化视图。我可以按下按钮,Alertview弹出,我可以键入并关闭它。没问题

但是,如果my view controller删除/销毁了DebugView,并在按下按钮后创建了一个新的DebugView,则应用程序将因EXC_BAD_访问而崩溃。我已经去掉了所有无关的代码,现在这是UIAlertView上没有委托的裸机,在第二次创建视图并按下按钮时,它仍然崩溃

如果我不切换视图,我可以按下按钮,取消警报,然后按任意次数

如果您对可能出现的问题有任何意见,我们将不胜感激

class DebugView : BaseView,UIAlertViewDelegate {

@IBOutlet weak var mDebugText: UITextView!

var mDelegate:DebugViewDelegate? = nil
var mMessage: String = ""

class func instanceFromNib(delegate:DebugViewDelegate? = nil) -> DebugView {
    let view = UINib(nibName: "DebugView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! DebugView
    view.refreshDisplay()
    view.mDelegate = delegate
    return view
}

override func refreshDisplay() {
    var debug:String = ""
    debug += "STATUS:" + mMessage + "\n\n"
    debug += "\n--END--"
    mDebugText.text = debug
}

@IBAction func onSelectEnterScan(sender: AnyObject) {
    var alertView:UIAlertView = UIAlertView(title: "Fake Scans", message: "Enter Scan Detail", delegate: nil, cancelButtonTitle: "Cancel", otherButtonTitles: "OK")
    alertView.alertViewStyle = UIAlertViewStyle.PlainTextInput;
    alertView.show()
}
}

崩溃发生在alertView.show()行。ViewController代码如下所示,许多不同的视图使用viewTransition在各种不同的视图中进行滑动/翻转,它们都可以正常工作:

func onSelectDebug(animation:AnimationType) {
    if isUILocked() { return }
    setNavCurrent(Constants.NAVIGATOR_DEBUG)

    let newView:BaseView = DebugView .instanceFromNib(delegate: self)
    newView.frame=CGRect(x: 0, y: 0, width: mMainHolder.frame.size.width, height: mMainHolder.frame.size.height);
    viewTransition(newView, animation:animation)
}

func onSelectHome(animation:AnimationType) {
    if isUILocked() { return }
    setNavCurrent(Constants.NAVIGATOR_HOME)

    let newView:BaseView = HomeView.instanceFromNib(delegate: self)
    newView.frame=CGRect(x: 0, y: 0, width: mMainHolder.frame.size.width, height: mMainHolder.frame.size.height)
    viewTransition(newView, animation:animation)
}
viewTransition函数执行UIView.animateWithDuration以滑出旧视图,并与新视图一起滑入,添加新视图,动画完成,完成后,旧视图从superview中删除,不再被引用。因此,如果我导致onSelectDebug,调试屏幕将滑入,我按下按钮,获取警报,使用导航导致onSelectHome,主屏幕将滑入,按下按钮导致调用onSelectDebug,调试屏幕将滑入,但我按下新DebugView上的按钮,砰,崩溃和死亡


崩溃详细信息:在主线程中堆栈帧objc_msgSend,EXC_BAD_ACCESS

在何处/如何销毁和重新创建调试视图?如果删除以下行:alertView.alertViewStyle=UIAlertViewStyle.PlainTextInput;然后它会工作的很好,但我失去了输入。这确实看起来很奇怪。。。一个解决方法可能是根据需要延迟加载调试视图,然后保留视图,这样就不必重新实例化…如果我保留/回收调试视图,它工作正常,我开始怀疑这可能是一个Swift/ARC错误!!