Ну, причина, по которой он "просто работает", заключается в том, что столбцы таблицы вызывают setSortDescriptors:
в связанном NSArrayController.
Предполагая, что вы хотите, чтобы таблица оставалась сортируемой, но вы всегда хотите отсортировать по "непрочитанным", вот как я бы это сделал:
Во-первых, подкласс NSArrayController и переопределение arrangeObjects
:
- (NSArray *)arrangeObjects:(NSArray *)objects {
NSMutableArray *oldSorted = [[super arrangeObjects:objects] mutableCopy];
NSMutableArray *newSorted = [NSMutableArray arrayWithCapacity:[oldSorted count]];
for (id anObject in oldSorted)
if ([[anObject valueForKey:@"isUnread"] boolValue])
[newSorted addObject:anObject];
[oldSorted removeObjectsInArray:newSorted];
[newSorted addObjectsFromArray:oldSorted];
[oldSorted release];
return newSorted;
}
Это помещает непрочитанные сообщения в" верх "(начало массива),Я не уверен, что это самый эффективный алгоритм сортировки, но я считаю, что это правильный путь.