swift - 默认 0 不是有效的连接 ID。以编程方式使用 swift 和 cocoa 时出错

标签 swift cocoa

我正在用 swift 编写一个针对 mac os 的游戏引擎。我使用 metal 进行渲染,使用 cocoa 处理窗口。整个应用程序都是以编程方式制作的。我没有使用 Storyboard或任何 xibs

我有这个文件: Window.swift

import Cocoa

class Window : NSObject
{

    let width, height : Int
    let title : String
    let size : CGSize
    let rect : NSRect
    let window : NSWindow

    init(width : Int, height: Int, title: String) {
        self.width = width
        self.height = height
        self.title = title
        self.size = CGSize(width: width, height: height)
        self.rect = NSRect(origin: .zero, size: size)
        self.window = NSWindow(contentRect: rect, styleMask: 
        .closable, backing: .buffered, defer: false)
    }

    func createWindow()
    {
        window.title = title
        window.isOpaque = false
        window.center()
        window.isMovableByWindowBackground = true
        window.backgroundColor = NSColor.gray
        window.makeKeyAndOrderFront(window)
    }
}

这是 ma​​in.swift

let window = Window.init(width: 1280, height: 720, title: "Serious")
window.createWindow()

这段代码看起来不错,但出于某种原因我得到了这个错误: 2020-03-25 10:34:49.719557-0700 GameEngine[1355:50613] [默认] 0 不是有效的连接 ID。 2020-03-25 10:34:49.727881-0700 GameEngine[1355:50613] [默认] 0 不是有效的连接 ID。 2020-03-25 10:34:49.728046-0700 GameEngine[1355:50613] [默认] 0 不是有效的连接 ID。 程序以退出代码结束:0

最佳答案

这个答案有点晚了,但我发布它是希望像我这样的其他可怜的笨蛋可以免于逐步执行汇编指令的艰苦过程。正如 Willeke 在评论中提到的,无效的样式掩码将导致记录此消息。在我的例子中,它是一个可关闭的、可小型化的、可关闭的窗口。添加标题标志解决了这个问题。我的理解是,如果您在初始化 Application 实例或调用 NSApplicationMain 之前创建窗口,样式位的无效组合可能不会引发异常,但会导致执行采用最终尝试在错误的地方,导致 ID 为 0 被发送到窗口服务器。

关于swift - 默认 0 不是有效的连接 ID。以编程方式使用 swift 和 cocoa 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60854494/

相关文章:

python - Objective-C 数组中的连续数字,如 Python 中的 range()

macos - NSLocalizedString 不返回本地化文本 XCode4

objective-c - 如何访问 NSBitmapImageRep 的像素?

swift - 你能装饰一个破坏调试的函数,而不是在调用该函数的地方中断吗?

ios - 'AnyObject' 没有名为 'note' 的成员

swift - 按日期快速排序我的 tableView

objective-c - 在Cocoa中,为什么直到IBAction完全执行之后才会显示文本字段?

ios - 如何使用UIBezierpath获取用于绘图的View(Drawing View)的截图

ios - Realm :无法将主键属性 'id' 设置为现有值

objective-c - 如何使用按钮在 cocoa mac 应用程序中打开新窗口