ios - Swift 中的奇怪 EXC_BAD_INSTRUCTION

标签 ios swift exc-bad-instruction

实际上,我遇到了一个神秘的问题。我正在尝试呈现一个 View Controller UIModalPresentationFormSheet 这是该类的代码

class AViewController: UIViewController
{
    @IBOutlet weak var a: UILabel!
    @IBOutlet weak var b: UILabel!
    @IBOutlet weak var c: UILabel!
    @IBOutlet weak var d: UISwitch!
    @IBOutlet weak var f: UISwitch!
    @IBOutlet weak var g: UISwitch!
    @IBOutlet weak var e: UITextField!
    var listOfCommentIds : [String]!
    var AView : AASubViewController!
    override func viewDidLoad()
    {
        super.viewDidLoad()
        navigationController!.navigationBar.setBackgroundImage(UIImage(named: "navigation-bg-ios6"),
            forBarMetrics: .Default)
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Done, target: self, action: "dismiss")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Send", style: UIBarButtonItemStyle.Done, target: self, action: "sendComment")

        navigationItem.title = "Send Comment";
        navigationController!.navigationBar.tintColor = UIColor.whiteColor()

        var application: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        var tababarController = application.tabBarController as UITabBarController
        var selectedIndex = tabBarController!.selectedIndex
//        self.adjustLayout()
        // Do any additional setup after loading the view.
    }
}

在尝试呈现它时,应用程序在 viewDidLoad 的第二行崩溃,但出现以下异常:

* thread #1: tid = 0x8ace, 0x000ef819 A`A.AAViewController.viewDidLoad (self=<unavailable>)() -> () + 3753 at AAViewController.swift:25, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
  * frame #0: 0x000ef819 A`A.AAViewController.viewDidLoad (self=<unavailable>)() -> () + 3753 at AAViewController.swift:25
    frame #1: 0x020952a4 UIKit`-[UIViewController loadViewIfRequired] + 771
    frame #2: 0x02095595 UIKit`-[UIViewController view] + 35
    frame #3: 0x00474a8b A`-[CommentsSubViewController showSendEmailViewControllerWithListOfIds:](self=0x7d92ebe0, _cmd=0x00625884, listOfIds=0x7f38cc00) + 555 at CommentsSubViewController.m:1177
    frame #4: 0x00473bce A`-[CommentsSubViewController sendEmailCommentButtonAction](self=0x7d92ebe0, _cmd=0x00625a6b) + 526 at CommentsSubViewController.m:1098
    frame #5: 0x037907cd libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 84
    frame #6: 0x01f3f23d UIKit`-[UIApplication sendAction:to:from:forEvent:] + 99
    frame #7: 0x01f3f1cf UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
    frame #8: 0x02072e86 UIKit`-[UIControl sendAction:to:forEvent:] + 69
    frame #9: 0x020732a3 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 598
    frame #10: 0x0207250d UIKit`-[UIControl touchesEnded:withEvent:] + 660
    frame #11: 0x01f8f60a UIKit`-[UIWindow _sendTouchesForEvent:] + 874
    frame #12: 0x01f900e5 UIKit`-[UIWindow sendEvent:] + 791
    frame #13: 0x01f55549 UIKit`-[UIApplication sendEvent:] + 242
    frame #14: 0x01f6537e UIKit`_UIApplicationHandleEventFromQueueEvent + 20690
    frame #15: 0x01f39b19 UIKit`_UIApplicationHandleEventQueue + 2206
    frame #16: 0x03a151df CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    frame #17: 0x03a0aced CoreFoundation`__CFRunLoopDoSources0 + 253
    frame #18: 0x03a0a248 CoreFoundation`__CFRunLoopRun + 952
    frame #19: 0x03a09bcb CoreFoundation`CFRunLoopRunSpecific + 443
    frame #20: 0x03a099fb CoreFoundation`CFRunLoopRunInMode + 123
    frame #21: 0x0867824f GraphicsServices`GSEventRunModal + 192
    frame #22: 0x0867808c GraphicsServices`GSEventRun + 104
    frame #23: 0x01f3d8b6 UIKit`UIApplicationMain + 1526
    frame #24: 0x0012b2bc A`main(argc=1, argv=0xbff13614) + 76 at main.m:12
    frame #25: 0x0452cac9 libdyld.dylib`start + 1

最奇怪的是当我注释掉以下行时:

var selectedIndex = tabBarController!.selectedIndex

这个 view controller 就像一个 sharm。

知道发生了什么吗?

最佳答案

你正在强制解开 tababarController ,它几乎肯定是零。尝试类似的方法:

if let tababarController = application.tabBarController as UITabBarController {
    // do things with tababarController now that we know it's not nil
}

关于ios - Swift 中的奇怪 EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421068/

相关文章:

ios - Swift 中的事件指示器

ios - SwiftUI 观察到对象在其属性更改时执行操作

ios - swift 3 - 'EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP,subcode=0x0)' 错误

iphone - Json 解析 objective-c 中的 nil 字段

ios - SpriteKit 场景未发布

iphone - 有没有办法以编程方式在iPhone中打开/关闭蓝牙?

swift - CoreData 多线程正在生成随机崩溃

swift - 试图理解我得到的这个随机错误//swift

ios - swift EXC_BAD_INSTRUCTION

ios - UICollectionView 中有两个自定义单元格,但第二个单元格的大小不正确