gpt4 book ai didi

objective-c - macOS 10.13 EXEC_BAD_ACCESS 由子类化 NSTableView 或 NSScrollView 引起

转载 作者:行者123 更新时间:2023-11-30 12:01:41 25 4
gpt4 key购买 nike

我面临着一个相当奇怪的问题。具体来说,子类化一些 NSView、NSTableView 和 NSScrollView。

情况:我正在为 macOS 开发一个相当古老(大约 7 年)的项目。代码库大约 50% 为 objc,50% 为 swift 3.2,并使用 XIB 文件作为各个 View 。该应用程序在 10.10 - 10.12 上运行顺利,但在 10.13 上几乎立即崩溃。

回溯显示以下内容:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x00007fff50490b05 Foundation`_NSKVONotifyingCreateInfoWithOriginalClass + 177
frame #1: 0x00007fff50490a35 Foundation`_NSKeyValueContainerClassGetNotifyingInfo + 59
frame #2: 0x00007fff504908c4 Foundation`-[NSKeyValueUnnestedProperty _isaForAutonotifying] + 75
frame #3: 0x00007fff5049075f Foundation`-[NSKeyValueUnnestedProperty isaForAutonotifying] + 75
frame #4: 0x00007fff5048f9fb Foundation`-[NSObject(NSKeyValueObserverRegistration) _addObserver:forProperty:options:context:] + 490
frame #5: 0x00007fff5048e7c9 Foundation`-[NSObject(NSKeyValueObserverRegistration) addObserver:forKeyPath:options:context:] + 103
frame #6: 0x00007fff504da865 Foundation`-[NSKeyValueNestedProperty object:withObservance:didChangeValueForKeyOrKeys:recurse:forwardingValues:] + 411
frame #7: 0x00007fff504af6d8 Foundation`NSKeyValueDidChange + 179
frame #8: 0x00007fff505eb370 Foundation`NSKeyValueDidChangeWithPerThreadPendingNotifications + 132
frame #9: 0x00007fff4c2ac3a0 AppKit`-[NSView didChangeValueForKey:] + 93
frame #10: 0x00007fff504aff4d Foundation`NSKeyValueNotifyObserver + 350
frame #11: 0x00007fff504af800 Foundation`NSKeyValueDidChange + 475
frame #12: 0x00007fff505eb370 Foundation`NSKeyValueDidChangeWithPerThreadPendingNotifications + 132
frame #13: 0x00007fff4c2ac3a0 AppKit`-[NSView didChangeValueForKey:] + 93
frame #14: 0x00007fff4bbf6877 AppKit`-[NSScrollView _makeUnderTitlebarView] + 165
frame #15: 0x00007fff4b9e9eff AppKit`-[NSScrollView _updateStateOfUnderTitlebarView] + 327
frame #16: 0x00007fff4bae5ef1 AppKit`-[NSScrollView viewDidMoveToWindow] + 113
frame #17: 0x00007fff4b9e82b2 AppKit`-[NSView _setWindow:] + 2867
frame #18: 0x00007fff4b9efe9d AppKit`-[NSScrollView _setWindow:] + 500
frame #19: 0x00007fff4e3ef79f CoreFoundation`-[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 239
frame #20: 0x00007fff4c2acfed AppKit`__21-[NSView _setWindow:]_block_invoke.604 + 141
frame #21: 0x00007fff504c9b4a Foundation`-[NSISEngine withBehaviors:performModifications:] + 131
frame #22: 0x00007fff4b9e602d AppKit`-[NSView(NSConstraintBasedLayout) _withAutomaticEngineOptimizationDisabled:] + 70
frame #23: 0x00007fff4b9e8203 AppKit`-[NSView _setWindow:] + 2692
frame #24: 0x00007fff4b9e52d5 AppKit`-[NSView addSubview:] + 257
frame #25: 0x00007fff4ba1e228 AppKit`-[NSFrameView addSubview:] + 44
frame #26: 0x00007fff4ba1e1ed AppKit`-[NSThemeFrame addSubview:] + 381
frame #27: 0x00007fff4ba1df1a AppKit`-[NSView addSubview:positioned:relativeTo:] + 214
frame #28: 0x00007fff4c2593bd AppKit`-[NSThemeFrame addSubview:positioned:relativeTo:] + 42
frame #29: 0x00007fff4ba1de37 AppKit`-[NSThemeFrame _addKnownSubview:positioned:relativeTo:] + 38
frame #30: 0x00007fff4ba43853 AppKit`-[NSWindow setContentView:] + 382
frame #31: 0x000000010007e8da MyApp`-[Document someContentViewItemSelected:](self=0x000060403b97eef0, _cmd="someContentViewItemSelected:", sender=0x0000604043fb0f60) at Document.m:230

回溯不是很有帮助(但也许我错过了一些东西),但是当新的 ViewController 的 View 被分配给窗口表的内容 View 时会发生错误 self.windowForSheet.contentView = contentViewController.view .

问题:该 Controller 的 View 有一个 NSTableview,我将其子类化并将界面构建器中的类分配给表对象。如果我删除这个子类,一切都会正常。

我尝试过的:

我尝试使用用 objc 和 swift 编写的完全空子类来重现问题,并且两者都出现问题,并且应用程序崩溃具有完全相同的回溯。

我尝试使用带有 View Controller 的 xib 和子类 NSTableView 创建一个新应用程序,它工作得很好!

我尝试使用 Xcode 8.3.3(在 10.12 和 10.13 上)和 9.1(在 10.13 上)编译应用程序,生成的应用程序显示相同的行为,在 10.12、10.11 上运行良好,但在 10.13 上崩溃。

我认为这一切都与它是一个非常古老的项目有关,具有混合语言和过时的 xib 文件,但我无法指出具体细节。

问题:你们知道这个问题可能是什么吗?在子类化 NSTableView 或 NSScrollView 时遇到问题(顺便说一下,NSTableViewCell 子类工作得很好)。

我感谢您给我的每一个帮助或意见。谢谢

最佳答案

尝试更新旧框架。我有 same problemSparkle 。从 1.8.0 更新到 1.18.1 解决了两个类似的错误。

(ca. 7 year) project for macOS.

很遗憾,但尚未在 Sparkle 中找到修复崩溃的确切提交。我认为它是在1.8.0和1.9.0版本之间。如果您找到导致崩溃的确切代码行,请告诉我。

关于objective-c - macOS 10.13 EXEC_BAD_ACCESS 由子类化 NSTableView 或 NSScrollView 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com