objective-c - 在我的 macOS 应用程序中,我收到令人讨厌的 "Unexpected outstanding background CATransaction"错误和崩溃,但仅限于从 Xcode 运行时

标签 objective-c macos cocoa cocoa-bindings

我有一个 Objective-C macOS 应用程序,它有一个窗口,该窗口的左侧基本上是一个 NSTableView,右侧是一个 NSSplitView 中的详细信息 View 。该窗口还具有标签和其他控件。一些元素由绑定(bind)驱动,另一些则通过引用导出驱动。只要我打开 window ,如果我不碰任何东西,它就会起作用。如果窗口一打开,我立即用鼠标在窗口的任何部分快速滚动,则会因以下堆栈跟踪而崩溃:

enter image description here

日志中出现令人讨厌的“意外的未完成后台 CATransaction”错误。我知道这种情况几乎总是由于后台线程中的 UI 更新造成的,但我在无数个小时内检查了我的代码,但找不到在后台完成的 UI 的单个更新。最奇怪的是,只有通过 Xcode 运行应用程序时才会发生崩溃。如果我从 Finder 运行该应用程序,则永远不会发生这种情况。 NSTableView 是通过数据源和委托(delegate)驱动的,我尝试删除连接,但它仍然发生。我尝试使用 return 语句排除部分代码,例如在 WindowDidLoad 中,但它仍然发生。删除绑定(bind)也没有解决问题。有人可以建议一种强大的技术来找出导致崩溃的指令吗?

编辑:

我已经从 NSWindowController 中的窗口中删除了所有对象,只留下了带有嵌入的 NSTableViewNSScrollView。即使我从 numberOfRowsInTableView 手动返回 0,它仍然会发生。我有一个可能的提示,可能会导致解决方案:如果我将 NSTableView 设置为不启用或隐藏,或两者兼而有之,它仍然会发生。如果我将 NSScrollView 设置为隐藏,则不会再发生这种情况。我希望这能给某人敲响警钟,因为我真的没有策略了。再次感谢。

最佳答案

我在使用 NSScrollView 时遇到了同样的问题& NSSplitView滚动长 View ,我通过使用 NSScrollView 的子类解决了这个问题。无需在该子类中添加任何代码。我不知道原因,但它有效。

关于objective-c - 在我的 macOS 应用程序中,我收到令人讨厌的 "Unexpected outstanding background CATransaction"错误和崩溃,但仅限于从 Xcode 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698973/

相关文章:

macos - Mac OS X 上没有 Java 源代码

macos - 如何在 Mac 上将 Raspbian 安装到 SD 卡

objective-c - windows关闭时如何退出 cocoa 应用程序?

ios - 使用核心数据的最佳实践

macos - 带参数的 Mac OS 登录项?

objective-c - 我怎样才能知道一个对象是否实现了一个特定的方法?

ios - iOS读取TXT记录

iOS - 如何关闭键盘?

ios - 关于Core Data的两个问题

ios - 选项 "class_prefix"未知元句法