Я пытаюсь ограничить количество объектов в контроллере массива, но по-прежнему хочу иметь доступ к полному массиву, если это необходимо. Простое решение, с которым я столкнулся, заключалось в подклассе NSArrayController и определении нового метода с именем «limitedArrangedObjects», который возвращает ограниченное количество объектов из реального набора упорядоченных объектов. (Я видел Limiting the number of objects in NSArrayController, но это не касается моей проблемы.)Подкласс NSArrayController, чтобы ограничить размер размещенных объектов
Я хочу, чтобы это свойство можно было наблюдать через привязки, поэтому я устанавливал зависимость от упорядоченных объектов на нем.
Проблема заключается в том, что при размещении объектов обновляются, limitedArrangedObjects, похоже, не соблюдает изменение значения в builtObjects. Я подключил NSCollectionView к limitedArrangedObjects, и отображаются нулевые объекты. (Если я привяжу его к builtObjects, все объекты появятся, как ожидалось.)
В чем проблема?
Вот соответствующий код:
@property (readonly) NSArray *limitedArrangedObjects;
- (NSArray *)limitedArrangedObjects;
{
NSArray *arrangedObjects = [super arrangedObjects];
NSUInteger upperLimit = 10000;
NSUInteger count = [arrangedObjects count];
if (count > upperLimit) count = upperLimit;
arrayToReturn = [arrangedObjects subarrayWithRange:NSMakeRange(0, count)];
return arrayToReturn;
}
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key;
{
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"limitedArrangedObjects"]) {
NSSet *affectingKeys = [NSSet setWithObjects:@"arrangedObjects",nil];
keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
}
return keyPaths;
}
Это потенциально может быть изящным решением, но, похоже, оно не работает, если мне нужно привязать к дополнительным свойствам completeArrangedObjects. Например, у меня есть свойство объектов в NSArrayController, называемое «name», и я могу привязываться к нему в отдельном представлении таблицы. Если я переопределить arrangeObjects: и создать новую completeArrangedObjects собственность, я не могу связать с «именем» Подствойство, как он бросает исключение: [ addObserver: forKeyPath: варианты: контекст:] не поддерживается. Путь к ключу: художник –