NSTreeController не отвечает на reloadData - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть NSTreeController с привязками к классу.

NSOutlineView dirTree привязывается к NSTreeController

В частности, представление Outline View Content связывается сранжированныйObjects

Это работает хорошо, но я в своем уме, чтобы выяснить, почему он не отвечает на reloadData.

Пути ключа NSTreeController: -

Children    subDirectories
Count       numberOfSubDirs

Они перечислены ниже;numberOfSubDirs возвращает простое количество подкаталогов (с добавленным диагностическим отображением).

- (NSArray *)subDirectories {
    if (subDirectories == nil) {
        [self loadSubDirectories];
    }
    return subDirectories;
}

- (NSInteger)numberOfSubDirs {
    NSArray *tmp = [self subDirectories];
    NSLog(@"numberOfSubDirs %@ %d", [self relativePath], [tmp count]);
    return [tmp count];
}

Если я вызываю функцию обновления, которая обновляет данные, то вызывает [dirTree reloadData];Я получаю следующий вывод: -

Reload Data
numberOfSubDirs Shared 7
numberOfSubDirs Adobe 1
numberOfSubDirs bZTree2 0
numberOfSubDirs Ian Documents 25
numberOfSubDirs Library 1
numberOfSubDirs NET 1
numberOfSubDirs TSA 12
numberOfSubDirs Wacom 1

Если я удаляю каталог (внешне в Finder) и вызываю функцию обновления, я получаю следующий вывод: -

Reload Data
numberOfSubDirs Shared 6
numberOfSubDirs Adobe 1
numberOfSubDirs bZTree2 0
numberOfSubDirs Ian Documents 25
numberOfSubDirs Library 1
numberOfSubDirs NET 1
numberOfSubDirs TSA 12
numberOfSubDirs Wacom 1

NSTreeController вызывает numberOfSubDirsна родительском «Shared», и ему правильно сказано, что теперь у него есть 6 подкаталогов.

Однако затем он запрашивает 7 подкаталогов, включая удаленный элемент «bZTree2», и не обновляет отображение, чтобы показать только 6, которыеесть.

1 Ответ

1 голос
/ 15 сентября 2011

NSTreeController не отвечает на -reloadData, поскольку не реализует этот метод.Вы получите и исключение времени выполнения, и предупреждение компилятора, если попытаетесь вызвать его на экземпляре NSTreeController.

NSOutlineView отвечает на -reloadData, но ничего не будет делать, если только NSOutlineView использует источник данных.Если вы используете NSTreeController, это вообще ничего не будет делать.

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

У Apple есть документация и пример кода для этого тоже.

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