배열 컨트롤러에서 객체 수를 제한하려고하지만 필요한 경우 전체 배열에 액세스 할 수 있기를 원합니다. 내가 생각해 낸 간단한 해결책은 NSArrayController를 서브 클래스 화하고 배열 된 실제 객체 세트에서 제한된 수의 객체를 반환하는 "limitedArrangedObjects"라는 새 메서드를 정의하는 것이 었습니다. (나는 Limiting the number of objects in NSArrayController을 본 적이 있지만 내 문제를 해결하지 못합니다.)배열 객체의 크기를 제한하기 위해 NSArrayController를 서브 클래스 화합니다.
바인딩을 통해이 속성을 관찰 할 수 있기 때문에이 속성을 selectedObjects에 설정합니다.
배열 객체를 업데이트하면 limitedArrangedObjects가 alignedObjects의 값 변경을 관찰하지 않는 것 같습니다. limitedArrangedObjects에 NSCollectionView를 연결했는데 0 개체가 표시되었습니다. (배열 객체를 대신에 객체에 바인딩하면 모든 객체가 예상대로 표시됩니다.)
문제점 :
@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 속성을 만드는 경우 예외를 throw하므로 "name"하위 속성에 바인딩 할 수 없습니다. [ addObserver : forKeyPath : options : context :]는 지원되지 않습니다. 주요 경로 : 아티스트 –