NSOutlineView падает, когда я расширяю больше чем одну ячейку - PullRequest
0 голосов
/ 29 мая 2011

У моего приложения 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...
            }
         }

Этот код вызывается для разных строк для каждого столбца. Но как только два или три родительских узла раскрываются, он просто срывается в аварийном режиме и отображает, что «ЭТО ПРОЙДЕНО на один уровень, НО не пройден на втором уровне». Это очень удивительно, так как после проверки данных это происходит после правильной работы трех или четырех строк. Кроме того, если попытаться напечатать его значение, оно работает нормально и печатает до тех пор, пока не встретится сбой. Даже он не отображает никаких данных в объекте item.

Другие необходимые функции источника данных реализованы и работают нормально. Сбой каждый раз в этой точке помечается только как 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:]

Кроме того, объект item, имеющий тип id, в порядке и имеет тип NSDictionary до возникновения этой проблемы, и он показывает во время отладки только с типом id , вызывающий эту проблему.

Пожалуйста, предложите, что можно сделать, чтобы отследить этот сбой или убедиться, что все связанные функции для расширения и отображения / извлечения данных работают нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...