Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSTableView取消考虑RowstIndexes崩溃_Macos_Cocoa_Nstableview_Appkit - Fatal编程技术网

Macos NSTableView取消考虑RowstIndexes崩溃

Macos NSTableView取消考虑RowstIndexes崩溃,macos,cocoa,nstableview,appkit,Macos,Cocoa,Nstableview,Appkit,我正在创建一个分组的NSTableView,它可以以我想要的方式加载所有对象 我还创建了折叠整个组部分(组行之间的行)的可能性,并使用添加到NSTableView()的hiderowsatinexes:withAnimation:和unhideRowsAtIndexes:withAnimation:) 隐藏似乎总是有效的,但取消隐藏会在某些行中崩溃。最后一行隐藏和取消隐藏很好,前一行总是在取消隐藏时崩溃。只有当我有更多行可以显示时,才会发生这种行为 Xcode提供的控制台崩溃日志: 0 Co

我正在创建一个分组的
NSTableView
,它可以以我想要的方式加载所有对象

我还创建了折叠整个组部分(组行之间的行)的可能性,并使用添加到
NSTableView
()的
hiderowsatinexes:withAnimation:
unhideRowsAtIndexes:withAnimation:

隐藏似乎总是有效的,但取消隐藏会在某些行中崩溃。最后一行隐藏和取消隐藏很好,前一行总是在取消隐藏时崩溃。只有当我有更多行可以显示时,才会发生这种行为

Xcode提供的控制台崩溃日志:

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
是否有可能的修复方法,或者这是一个框架问题

代码:
由于这个问题也一直困扰着我,我做了一些挖掘,你知道些什么?你是对的!这是一个AppKit错误。以下是AppKit的一些详细信息:

NSTableView

在macOS 10.13之前,使用标准行高度时,使用-HIDEROWSATINDEX:withAnimation:方法隐藏行无法正常工作。macOS 10.13上的所有应用程序都已修复此问题。如果您的目标是较旧的操作系统,建议通过实现-tableView:heightOfRow:并返回所需的行高来使用“可变行高”;这将解决隐藏行索引的bug

使用非连续行集时,在macOS 10.13之前的版本中,使用-unhideRowsAtIndexes:withAnimation:方法取消隐藏行无法正常工作。macOS 10.13上的所有应用程序都已修复此问题

你会注意到第二段提到了你的问题

如果您正在开发早期版本的macOS,可以执行以下操作:

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
            )
        }
    }
}
我希望我能说这100%的时间都能解决问题,然而,事实似乎并非如此。每隔一段时间,我似乎仍会遇到这样的例外情况:

-[\uu NSArrayM objectAtIndex:]:索引11超出范围[0..10]

这可能是由于其他因素造成的,比如我的半复杂过滤代码,但由于我实际上看不到苹果在其
NSTableView
方法中做了什么,比如
\u updateVisibleViewsBasedOnUpdateItems
,我只是不确定


哦,好吧。我想我应该发布一个答案,让其他与这个问题斗争的人知道这个bug。祝你好运,旅途平安,我的地球同胞。

这个问题也一直困扰着我,我做了一些挖掘,你知道些什么?你是对的!这是一个AppKit错误。以下是AppKit的一些详细信息:

NSTableView

在macOS 10.13之前,使用标准行高度时,使用-HIDEROWSATINDEX:withAnimation:方法隐藏行无法正常工作。macOS 10.13上的所有应用程序都已修复此问题。如果您的目标是较旧的操作系统,建议通过实现-tableView:heightOfRow:并返回所需的行高来使用“可变行高”;这将解决隐藏行索引的bug

使用非连续行集时,在macOS 10.13之前的版本中,使用-unhideRowsAtIndexes:withAnimation:方法取消隐藏行无法正常工作。macOS 10.13上的所有应用程序都已修复此问题

你会注意到第二段提到了你的问题

如果您正在开发早期版本的macOS,可以执行以下操作:

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
            )
        }
    }
}
我希望我能说这100%的时间都能解决问题,然而,事实似乎并非如此。每隔一段时间,我似乎仍会遇到这样的例外情况:

-[\uu NSArrayM objectAtIndex:]:索引11超出范围[0..10]

这可能是由于其他因素造成的,比如我的半复杂过滤代码,但由于我实际上看不到苹果在其
NSTableView
方法中做了什么,比如
\u updateVisibleViewsBasedOnUpdateItems
,我只是不确定


哦,好吧。我想我应该发布一个答案,让其他与这个问题斗争的人知道这个bug。祝你好运,旅途平安,我的地球同胞。

这肯定是你代码中的一个错误。显示代码并显示与stacktrace相关的异常文本(可能是“索引超出范围异常”的内容)。我的测试代码,不介意组织,它只是一个测试文件。我曾经有过类似的问题(但不是确切的问题),它与小节的标题有关。您是否使用了节标题?我相信这可能是一个错误。我甚至检查了我试图删除的索引是否在属性
hiddenRowIndexes
中,但它仍然是
UnhideRowSatiIndexes:withAnimation:
未按预期工作。(顺便说一句,你可以使用unhide方法隐藏和取消隐藏,你基本上不需要隐藏,因为取消隐藏更像是一个切换)我不确定切换行为。当我试图取消隐藏尚未隐藏的行时,我遇到了崩溃。因此,我将所有
unhideRowsAtIndexes()
调用包装在一个检查中,以确保我要取消隐藏的索引包含在当前隐藏的索引中:
tableview.hiddenRowIndexes.containsIndexes(indexetoUnhide)
这肯定是代码中的一个错误。显示代码并显示与stacktrace相关的异常文本(可能是“索引超出范围异常”的内容)。我的测试代码,不介意组织,它只是一个测试文件。我曾经有过类似的问题(但不是确切的问题),它与小节的标题有关。您是否使用了节标题?我相信这可能是一个错误。我甚至检查了我试图删除的索引是否在属性
hiddenRowIndexes
中,但它仍然是
UnhideRowSatiIndexes:withAnimation:
未按预期工作。(顺便说一句,您可以使用unhide方法隐藏和取消隐藏,基本上不需要