我正在尝试限制数组控制器中的对象数量,但如果需要,我仍然希望能够访问整个数组。我想出的一个简单的解决方案是继承 NSArrayController,并定义一个名为“limitedArrangedObjects”的新方法,它从真实的排列对象集中返回有限数量的对象。(我已经看到限制 NSArrayController 中的对象数量,但这并不能解决我的问题。)
我希望这个属性可以通过绑定来观察,所以我在它上面设置了一个对arrangedObjects 的依赖。
问题是,当排列对象被更新时,limitedArrangedObjects 似乎没有观察到排列对象中的值变化。我已经将 NSCollectionView 连接到 limitedArrangedObjects,并且正在显示零个对象。(如果我将它绑定到排列对象,所有对象都会按预期显示。)
有什么问题?
以下是相关代码:
@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;
}