当我扩展多个单元格时,NSOutlineView会崩溃

时间:2011-05-29 19:14:15

标签: objective-c cocoa macos

我的Mac应用程序有一个NSOutlineView,其中包含要扩展数据的不同单元格。我正在使用这个功能:

(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item

以每个单元格的列显示数据。

仅在此功能中,我的应用程序崩溃。当行显示数据时会发生这种情况。一段代码是:

         if (item)
     {
    NSLog(@"Passed first level");
            //NSLog(@"Item is: %@", item); // CRASH POINT
    if([item isKindOfClass:[NSDictionary class]]) // CRASH POINT
    {
               NSLog(@"Passed second level");
               if([[tableColumn identifier] isEqualToString:@"columnA"])
        {
            NSLog(@"Column A");
            outlineViewDataValue = [item valueForKey:@"columnA"];

        }
               and so on for other identifiers...
            }
         }

为每列的不同行调用此代码。但是,一旦两个或三个父节点被扩展,那么它就会在崩溃时爆炸,并显示“IT PASSED level one BUT not Pasted level two”。这非常令人惊讶,因为在验证数据之后,它在三行或四行正常工作之后发生。此外,如果尝试打印它的值,它会很好并打印,直到它遇到崩溃。即使它没有在项目对象中显示任何数据。

实现了其他必需的数据源函数,并且工作正常。此时的崩溃每次都只标记为CRASH POINT。

当我扩展多个单元格时,当我展开第三个单元格或第四个单元格时,它会崩溃。当只有一行要扩展时,就没有问题,我们可以一次又一次地扩展和关闭。

崩溃堆栈是:

#0  0x93efaedb in objc_msgSend
#1  0x0001b745 in -[MyViewController outlineView:objectValueForTableColumn:byItem:] at MyViewController.m:26
#2  0x91c76b19 in -[NSOutlineView _dataSourceValueForColumn:row:]
#3  0x91c765f2 in -[NSTableView preparedCellAtColumn:row:]
#4  0x91c90acc in -[NSTableView _drawContentsAtRow:column:withCellFrame:]
#5  0x91c90a3a in -[NSOutlineView _drawContentsAtRow:column:withCellFrame:]
#6  0x91c8fb3a in -[NSTableView drawRow:clipRect:]
#7  0x91c8f572 in -[NSTableView drawRowIndexes:clipRect:]
#8  0x91c8f3ff in -[NSOutlineView drawRowIndexes:clipRect:]
#9  0x91c8df4b in -[NSTableView drawRect:]
#10 0x91c83a36 in -[NSView _drawRect:clip:]
#11 0x91c826d4 in -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
#12 0x91c82a09 in -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
#13 0x91c82a09 in -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
#14 0x91c80bf3 in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]

此外,id类型的item对象很好,并且在出现此问题之前是NSDictionary类型,并且它在调试期间仅显示id类型导致此问题。

请建议如何跟踪此崩溃,或确保展开和显示/获取数据的所有相关功能都能正常运行。

0 个答案:

没有答案