0

我最近发布了关于 MonoMac 中的一个错误,在该错误中,单击按钮 20 次左右后窗口会突然消失。事实证明,该错误似乎不会影响 Xamarin.Mac,因此我将项目切换到该错误。

但是现在我在不同的上下文中看到了几乎相同的错误:在 NSTextField 中键入几行文本后,窗口以完全相同的方式消失。没有错误,没有例外;它就消失了。噗,走了!

我在一个简单的项目中重现了这一点:您可以通过创建一个新的空 Xamarin.Mac 项目、将此代码添加到一个新文件中并运行来自己查看它。然后将键盘捣碎一会儿。5 或 6 行后,窗口消失。

(请注意,当我选择菜单命令时,应用程序菜单会继续工作,写入日志消息并执行我的代码。所以它看起来不像应用程序本身已经崩溃。)

奇怪的是,这似乎只发生在该字段位于 IsFlipped 已被覆盖的 NSView 子类中时。但是 IsFlipped 返回 true 或 false 并不重要——如果方法存在,就会出现错误;如果注释掉,该错误似乎不会发生。

那么:有没有其他人在 Xamarin.Mac 中遇到过这种错误?也许在其他情况下,这会给我们更多关于根本原因的线索?Xamarin 新手的任何调试技巧?

(我知道我可以通过避免 IsFlipped 在某些项目中解决它,但我担心它会以其他方式弹出来咬我。)

4

1 回答 1

2

好的,事实证明这根本不是 Xamarin.Mac 中的错误,而是我的代码中的错误。因为我没有保留对 NSWindow 对象的引用,所以它超出了范围,一旦垃圾收集器注意到它,它就会被处理掉并且 GUI 窗口被拆除。

我们所要做的就是保留对窗口的引用(例如,在 AppDelegate 类中),问题就消失了。

向 Xamarin 的 Chris Hamons 脱帽致敬,他马上就明白了这一点,并很快为我找到了问题所在。

于 2014-05-10T12:33:17.357 回答