为什么Xamarin.Mac窗口突然消失?

时间:2014-05-09 16:49:19

标签: c# xamarin nsview nstextfield xamarin.mac

我最近posted关于MonoMac中的一个错误,在点击一个按钮20次后,窗口会突然消失。事实证明,这个错误似乎不会影响Xamarin.Mac,所以我将项目切换到了那个。

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

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

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

奇怪的是,这似乎只发生在字段位于已覆盖IsFlipped的NSView子类中。但是,IsFlipped是返回true还是false并不重要 - 如果方法完全存在,则会发生错误;如果被注释掉,那么这个bug似乎就不会发生了。

所以:有没有其他人在Xamarin.Mac遇到这种错误?或许在其他情况下会给我们提供更多关于根本原因的线索?有关Xamarin新手的任何调试技巧吗?

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

1 个答案:

答案 0 :(得分:2)

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

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

向Xamarin的Chris Hamons致敬,他突然跳上了这个,很快就找到了问题。