我有一个 Objective-C macOS 应用程序,它有一个窗口,该窗口的左侧基本上是一个 NSTableView
,右侧是一个 NSSplitView
中的详细信息 View 。该窗口还具有标签和其他控件。一些元素由绑定(bind)驱动,另一些则通过引用导出驱动。只要我打开 window ,如果我不碰任何东西,它就会起作用。如果窗口一打开,我立即用鼠标在窗口的任何部分快速滚动,则会因以下堆栈跟踪而崩溃:
日志中出现令人讨厌的“意外的未完成后台 CATransaction”错误。我知道这种情况几乎总是由于后台线程中的 UI 更新造成的,但我在无数个小时内检查了我的代码,但找不到在后台完成的 UI 的单个更新。最奇怪的是,只有通过 Xcode 运行应用程序时才会发生崩溃。如果我从 Finder 运行该应用程序,则永远不会发生这种情况。 NSTableView 是通过数据源和委托(delegate)驱动的,我尝试删除连接,但它仍然发生。我尝试使用 return 语句排除部分代码,例如在 WindowDidLoad 中,但它仍然发生。删除绑定(bind)也没有解决问题。有人可以建议一种强大的技术来找出导致崩溃的指令吗?
编辑:
我已经从 NSWindowController
中的窗口中删除了所有对象,只留下了带有嵌入的 NSTableView
的 NSScrollView
。即使我从 numberOfRowsInTableView
手动返回 0,它仍然会发生。我有一个可能的提示,可能会导致解决方案:如果我将 NSTableView 设置为不启用或隐藏,或两者兼而有之,它仍然会发生。如果我将 NSScrollView 设置为隐藏,则不会再发生这种情况。我希望这能给某人敲响警钟,因为我真的没有策略了。再次感谢。
最佳答案
我在使用 NSScrollView
时遇到了同样的问题& NSSplitView
滚动长 View ,我通过使用 NSScrollView
的子类解决了这个问题。无需在该子类中添加任何代码。我不知道原因,但它有效。
关于objective-c - 在我的 macOS 应用程序中,我收到令人讨厌的 "Unexpected outstanding background CATransaction"错误和崩溃,但仅限于从 Xcode 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698973/