在addSubview上的NSViewController子类EXC_BAD_INSTRUCTION

时间:2018-03-24 08:36:11

标签: swift cocoa nsviewcontroller

我正在尝试编写一些与macOS和iOS交叉平台的代码。我知道这不是这样做的方式,但是我不得不奇怪地开发东西,因为我正在做一个Playground书,而Metal在模拟器上不起作用。

所以我有以下typedef。当我希望在MacOS中编译时,有两组用于iOS,而另一组用于iOS

//iOS
public typealias View = UIView
public typealias ViewController = UIViewController

//macOS
public typealias View = NSView
public typealias ViewController = NSViewController

我一次只保留一套未注释的内容。

以下代码适用于iOS

public class PVC: NSViewController{
    public override func viewDidLoad() {
        super.viewDidLoad()

    }
    public required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    public init() {
        super.init(nibName: nil, bundle: nil)
    }
    public func addView(viewer: NSView) {
        view.addSubview(viewer)
    }
}

let pvc = PVC()
let grid = //UIView initializer
pvc.addView(viewer: grid)

但是在MacOS上,pvc.addView行会编译,但会在运行时生成消息error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.

我已经检查并且网格视图已正确形成,并且可以例如在必要时添加到默认IOS项目的视图控制器中。这只是导致这个问题的NSViewControllers的一部分。

1 个答案:

答案 0 :(得分:0)

您没有从Storyboard或Xib加载ViewController,请尝试从Storyboard / Xib初始化ViewController。这样就不会得到。