代码之家  ›  专栏  ›  技术社区  ›  Sti

应用程序在显示另一个窗口时崩溃,但仅在未调试时崩溃

  •  0
  • Sti  · 技术社区  · 6 年前

    我是一名iOS开发人员,试图开发一款小型macOS应用程序。 我有故事板,还有两个带有viewController的NSWindowController。

    单击第一个(初始)控制器中的按钮时,我想要另一个窗口(及其viewController)。 我试过两件事:

    1. 在VC1和Window2之间创建一个segue,命名并调用它。
    2. 实例化 self.storyboard?.instantiate(..) .

    当我通过Xcode运行这个程序时,这两种方法都有效。但如果我关闭Xcode并运行生成的产品,当我试图打开下一个viewController时,它就会崩溃,并说:

    Crashed Thread:        0  Dispatch queue: com.apple.main-thread
    
    Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
    Exception Codes:       0x0000000000000001, 0x0000000000000000
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Signal:    Illegal instruction: 4
    Termination Reason:    Namespace SIGNAL, Code 0x4
    Terminating Process:   exc handler [32282]
    
    Application Specific Information:
    Performing @selector(ok:) from sender _NSPaddedButton 0x600003d0ac40
    
    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0   com.my.app              0x000000010d3e998e FirstViewController.openFile(at:) + 734 (SecondViewController.swift:44)
    1   com.my.app              0x000000010d3e95e9 closure #1 in FirstViewController.openFile(_:) + 249 
    

    我现在用这个来实例化它:

    if let w = storyboard?.instantiateController(withIdentifier: "secondWindowIdentifier") as? NSWindowController{
        if let d = w.contentViewController as? SecondViewController{
            d.doSomething(someData: myData)
            self.presentAsModalWindow(d)
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Sti    6 年前

    我想出来了。在提供的错误中不清楚,但在测试了几次之后,我注意到它有时会显示不同的错误。我发现其中一个提到了我在下一个视图中放置的网络视图。 我只是写了 import WebKit 在文件中,我需要它,但没有将其添加到项目的“常规”选项卡中的链接框架中。我不确定为什么这100%没有在调试器中崩溃,为什么100%在产品上崩溃,但哦,好吧。