2016-06-03 2 views
0

그룹화 된 NSTableView을 만들고 모든 개체를 원하는대로로드합니다.NSTableView unhideRowsAtIndexes 충돌이 발생합니다.

I는 전체 그룹 섹션 (그룹 행의 행) 축소 가능성을 만들고 난 NSTableView (https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/#10_11TableView)에 추가 된 hideRowsAtIndexes:withAnimation:unhideRowsAtIndexes:withAnimation:를 사용한다.

숨기기가 항상 작동하는 것처럼 보이지만 일부 행에서는 숨김이 취소됩니다. 마지막 열은 숨 깁니다. 마지막에는 항상 숨기기 해제됩니다. 이 동작은 더 많은 행을 표시 할 수있을 때만 발생합니다. 엑스 코드에 의해 주어진

콘솔 충돌 로그 : 가능한 수정

0 CoreFoundation      0x00007fff95d034f2 __exceptionPreprocess + 178 
1 libobjc.A.dylib      0x00007fff9b506f7e objc_exception_throw + 48 
2 CoreFoundation      0x00007fff95c1a7c5 -[__NSArrayM objectAtIndex:] + 245 
3 AppKit        0x00007fff94e0496c -[NSTableRowData _updateVisibleViewsBasedOnUpdateItems] + 2701 
4 AppKit        0x00007fff94e03dc5 -[NSTableRowData _updateVisibleViewsBasedOnUpdateItemsAnimated] + 241 
5 AppKit        0x00007fff94d17d3f -[NSTableRowData _doWorkAfterEndUpdates] + 82 
6 AppKit        0x00007fff94d1db49 -[NSTableView _doUpdatedWorkWithHandler:] + 251 
7 AppKit        0x00007fff953209bc -[NSTableView hideRowsAtIndexes:withAnimation:] + 249 
8 Testing NSTableView Collapse  0x0000000100004dfd -[AppDelegate collapse:] + 285 
9 libsystem_trace.dylib    0x00007fff945ac07a _os_activity_initiate + 75 
10 AppKit        0x00007fff94e75dbd -[NSApplication sendAction:to:from:] + 460 
11 AppKit        0x00007fff94e87f12 -[NSControl sendAction:to:] + 86 
12 AppKit        0x00007fff94e87e3c __26-[NSCell _sendActionFrom:]_block_invoke + 131 
13 libsystem_trace.dylib    0x00007fff945ac07a _os_activity_initiate + 75 
14 AppKit        0x00007fff94e87d99 -[NSCell _sendActionFrom:] + 144 
15 libsystem_trace.dylib    0x00007fff945ac07a _os_activity_initiate + 75 
16 AppKit        0x00007fff94e863be -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2693 
17 AppKit        0x00007fff94ecef04 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 744 
18 AppKit        0x00007fff94e84ae8 -[NSControl mouseDown:] + 669 
19 AppKit        0x00007fff953d93c9 -[NSWindow _handleMouseDownEvent:isDelayedEvent:] + 6322 
20 AppKit        0x00007fff953da3ad -[NSWindow _reallySendEvent:isDelayedEvent:] + 212 
21 AppKit        0x00007fff94e19539 -[NSWindow sendEvent:] + 517 
22 AppKit        0x00007fff94d99a38 -[NSApplication sendEvent:] + 2540 
23 AppKit        0x00007fff94c00df2 -[NSApplication run] + 796 
24 AppKit        0x00007fff94bca368 NSApplicationMain + 1176 
25 Testing NSTableView Collapse  0x0000000100001352 main + 34 
26 libdyld.dylib      0x00007fff89d675ad start + 1 

가 아니면이 프레임 워크의 문제인가?

CODE :이 문제로 http://pastebin.com/esMH1LBF

+1

이것은 코드에서 가장 확실한 버그입니다.코드를 보여주고 해당 스택 추적과 관련된 예외 텍스트를 보여줍니다 (이는 "범위를 벗어나는 인덱스 예외"라인을 따라있을 가능성이 큽니다). – Droppy

+0

http://pastebin.com/esMH1LBF 테스트 코드, 그냥 테스트 파일 일뿐입니다. – Rageofflames

+0

Droppy anything? – Rageofflames

답변

1

내가 뒷조사를했고, 당신은 무엇을 알고뿐만 아니라 저를 괴롭 히고있다? 당신이 옳았! AppKit 버그입니다.

NSTableView는

메소드 -hideRowsAtIndexes와 행 숨기기 : withAnimation를 : 여기에 AppKit의의 10.13 Release Notes에서 일부 세부 사항은 표준 행 높이를 사용할 때 맥 OS 10.13 올바르게 이전에 작동하지 않았다. MacOS 10.13의 모든 응용 프로그램에서이 문제가 수정되었습니다. 이전 OS를 대상으로하는 경우 -tableView : heightOfRow :를 구현하여 "가변 행 높이"를 사용하고 원하는 행 높이를 반환하는 것이 좋습니다. 이것은 숨겨진 행 인덱스가있는 버그를 해결합니다.

비 연속적인 행 세트를 사용할 때 -unhideRowsAtIndexes : withAnimation : 메소드를 사용하여 행 숨기기 해제가 macOS 10.13 이전에 올바르게 작동하지 않았습니다. MacOS 10.13의 모든 응용 프로그램에서이 문제가 수정되었습니다.

두 번째 단락에 문제가 언급되어 있습니다.

당신이 맥 OS의 이전 버전을 개발하는 경우, 다음을 수행 할 수 있습니다 : 나는, 그러나,이 문제를 100 % 해결되는 말 '아무튼 것을 수 있으면 좋겠다

func unhideRows(at indexes: IndexSet, animation: NSTableView.AnimationOptions = []) { 
    if #available(macOS 10.13, *) { 
     outlineView.unhideRows(
      at: indexes, 
      withAnimation: animation 
     ) 
    } else { 
     for range in indexes.rangeView { 
      outlineView.unhideRows(
       at: IndexSet(integersIn: range), 
       withAnimation: animation 
      ) 
     } 
    } 
} 

t 것 같습니다. 범위를 넘는 인덱스 (11) [0 .. 10]은

이 될 수있다 : - [__ NSArrayM objectAtIndex는 :]

: 한 번 잠시의 모든, 나는 여전히이 같은 경계 예외로 실행하는 것 내 세미 컴플렉스 필터링 코드와 같은 다른 요인들 때문에, 과 같은 NSTableView 메쏘드에서 애플이 실제로하는 일을 실제로 볼 수 없기 때문에 나는 잘 모르겠다.

오, 잘. 나는이 문제에 어려움을 겪고있는 다른 사람들이 버그를 알고 있도록 대답을 게시해야한다고 생각했습니다. 행운과 안전 여행, 내 동료 지구.

+0

내 자신의 숨기기/숨기기 방법을 만드는 문제. 이것은 실제로 버그 였고 복제가 상당히 간단했습니다. 답변 해 주셔서 감사합니다. :디 – Rageofflames

관련 문제