2017-11-06 9 views
0

私はかなり奇妙な問題に直面しています。いくつかのNSViewsをサブクラス化することで、NSTableViewとNSScrollViewが特定のものになります。macOS 10.13 EXEC_BAD_ACCESSはNSTableViewまたはNSScrollViewをサブクラス化することによって発生します

状況: 私はかなり古い(約7年)MacOSプロジェクトに取り組んでいます。コードベースはobjcが約50%、swift 3.2が50%で、個々のビューにXIBファイルを使用しています。アプリケーションは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のビューが割り当てられますときにエラーが発生しましたウィンドウシートのコンテンツビューself.windowForSheet.contentView = contentViewController.view

問題:そのコントローラの ビューは、私はサブクラスおよび表オブジェクトへのインタフェースビルダーにクラスを割り当てNSTableviewを有しています。 このサブクラスを削除すると、すべて正常に動作します。私は試した何

:私はにObjCと迅速中との両方で書かれた完全空のサブクラスで問題を再現してみました

は、問題が発生すると、まったく同じでアプリクラッシュバックトレース。

xibをビューコントローラとサブクラス化したNSTableViewを使って新しいアプリケーションを作成しようとしましたが、うまくいきました!

Xcode 8.3.3(on 10.12 & 10.13)と9.1(on10.13)でアプリをコンパイルしようとしましたが、結果のアプリは同じ動作をして10.12,10.11で正常に動作しましたが、10.13でクラッシュします。

私はそれが、混合言語と古くなったxibファイルを持つ非常に古いプロジェクトであることを前提としていますが、具体的に指を指すことはできません。

質問: この問題の原因を知っていますか? NSTableViewまたはNSScrollViewのサブクラス化に問題がありました(NSTableViewCellサブクラスはうまく機能します)。

私はあなたが私に与えることができるすべての助けや入力を感謝します。ありがとうございます

+0

サブクラス化されたNSTableViewを持つ新しいプロジェクトがクラッシュしない場合は、ここからどのように診断できるかわかりません。プロジェクトのコピーをとり、それが機能するまで部品を取り外したままにしますか? – Ssswift

+0

どのウィンドウは 'windowForSheet'から返されますか? – Willeke

+0

@Willekeドキュメントベースのアプリケーションであるため、メイン(通常は1つしかありません)ウィンドウ(NSWindow)があります。 – Semi

答えて

0

古いフレームワークを更新してみてください。私はsame problemSparkleを持っていました。 1.8.0から1.18.1へのアップデートは、2つの同様のバグを解決しました。

(約7年)macOSのプロジェクトです。

悲しいですが、クラッシュを修正したSparkleで正確なコミットが見つかりませんでした。バージョン1.8.0から1.9.0の間だと思います。コードの正確な行がクラッシュを引き起こしたことがわかったら私に知らせてください。

+1

お知らせします。返信いただきありがとうございます。 – Semi

+0

素晴らしい!スパークル1.8が問題でした。ご助力ありがとうございます! 残念ながら、スパークルのコミットを参照しても、私には問題の根源が示されませんでした。 – Semi

+0

私はそのコミット(注意深くはない)を見てきました...そして理由を見つけていません。私の答えはあなたにとって有益だとうれしい。 – ZevsVU

関連する問題