tableView sortDescriptorsDidChange: не вызывается - PullRequest
0 голосов
/ 14 января 2010

Привет,

У меня есть NSTableView с двумя столбцами, который работает нормально ... за исключением: если я установлю дескриптор сортировки для таблицы в Интерфейсном Разработчике, все будет работать как ожидалось, и sortDescriptorsDidChange будет вызван, как и ожидалось. Однако, если я не устанавливаю дескрипторы сортировки в Интерфейсном Разработчике и вместо этого использую это:

[tableView setSortDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:) ]autorelease]]];

(где «name» - это идентификатор для самого левого столбца) в моем коде sortDescriptorsDidChange никогда не вызывается. Когда я прочитал (неправильно прочитал?) Документацию Apple для NSTableView, то, что я делаю, я думаю, должно работать. Что я делаю не так?

P.S. Я знаю, что я мог бы также использовать NSArrayController для всего этого (и если я делаю это работает нормально), но по какой-то причине я решил не делать этого.

1 Ответ

0 голосов
/ 10 мая 2011

это должно работать без этого, но вы пытались самостоятельно отправлять уведомления KVO?

[tableView willChangeValueForKey:@"sortDescriptors"];
[tableView setSortDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:) ]autorelease]]];
[tableView didChangeValueForKey:@"sortDescriptors"]; 

если вы не хотите добавлять дескрипторы в IB, вы можете сделать что-то вроде этого

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)theColumn row:(NSInteger)rowIndex {
    //if we have no sort descriptor for this column create one based on it's identifier (instead of setting it for each in IB,saves time and prevents errors)
    NSSortDescriptor *desc = [theColumn sortDescriptorPrototype];
    if ([desc key] == nil) {
        NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:[theColumn identifier] ascending:YES];  
        [theColumn setSortDescriptorPrototype:sorter];
        [sorter release];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...