我正在尝试编写一些与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的一部分。
答案 0 :(得分:0)
您没有从Storyboard或Xib加载ViewController,请尝试从Storyboard / Xib初始化ViewController。这样就不会得到。