2017-11-06 23 views
0

다소 이상한 문제가 있습니다. 일부 NSViews, NSTableView 및 NSScrollView를 서브 클래 싱하여 특정합니다.macOS 10.13 EXEC_BAD_ACCESS가 NSTableView 또는 NSScrollView를 하위 클래스 화하여 발생했습니다.

상황 : 나는 꽤 오래된 (약 7 년) macOS 프로젝트에 참여하고 있습니다. 코드베이스는 약 50 % objc이고 50 % swift 3.2이며 개별보기에 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.

문제 : 해당 컨트롤러 보기는 서브 클래스 I 및 표 객체 인터페이스 빌더 클래스를 할당 NSTableView는를 갖는다. 이 하위 클래스를 제거하면 모든 것이 잘 동작합니다. 내가 시도 무엇

: 나는 objc하고 신속과 모두 작성 완전히 빈 서브 클래스으로 문제를 재현하려

는 문제가 발생하고 동일한와 응용 프로그램 충돌 역 추적.

보기 컨트롤러와 서브 클래 싱 된 NSTableView와 함께 xib를 사용하는 새로운 앱을 만들려고했는데 제대로 작동합니다!

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로 업데이트하면 비슷한 두 가지 버그가 해결되었습니다.

(약 7 년) macOS 용 프로젝트입니다.

슬프지만 충돌을 수정 한 Sparkle에서 정확한 커밋을 찾지 못했습니다. 버전 1.8.0과 1.9.0 사이라고 생각합니다. 정확한 코드 줄이 충돌을 일으킨 것을 알게되면 알려주십시오.

+1

알려 드리겠습니다. 답장을 보내 주셔서 감사합니다. – Semi

+0

놀라워요! 스파클 1.8이 문제였습니다. 당신의 도움을 주셔서 대단히 감사합니다! 불행히도 스파클을 통한 탐색은 저에게 문제의 근본을 보여주지 못했습니다. – Semi

+0

나는 또한 저 커밋을 (주의 깊게) 살펴 보았다. 이유를 찾지 못했다. 나의 대답이 당신에게 도움이 되었다니 다행. – ZevsVU