这不是一个答案——更多的是前一个问题的延伸。
我创建了 MatchesArrayController 并将其从 NSArrayController 子类化以允许进行一些自定义。
按照'Cocoa Bindings Topics'中的'Filtering Using a Custom Array Controller'中的示例,我遵循与上述相同的想法:MatchessArrayController:内容绑定到appDelegatematchesPopUpArrayData。
matchesPopup:内容绑定到 MatchesArrayController.arrangedObjects;绑定到 MatchesArrayController.arrangedObjects.matchDescription 的内容值。
我从 seasonPopUp:sender 派生了选定的项目,并用它来识别 seasonId。这个想法是通过定义以下内容来更改 MatchesArrayController 中的排列对象;
- (NSArray *)arrangeObjects:(NSArray *)objects
{
if (searchString == nil) {
return [super arrangeObjects:objects];
}
NSMutableArray *filteredObjects = [NSMutableArray arrayWithCapacity:[objects count]];
NSEnumerator *objectsEnumerator = [objects objectEnumerator];
id item;
while (item = [objectsEnumerator nextObject]) {
if ([[[item valueForKeyPath:@"matchSeasonId"] stringValue] rangeOfString:searchString options:NSAnchoredSearch].location != NSNotFound) {
[filteredObjects addObject:item];
}
}
return [super arrangeObjects:filteredObjects];
}
- (void)searchWithString:(NSString *)theSearchString {
[self setSearchString:theSearchString];
[self rearrangeObjects];
}
- (void)setSearchString:(NSString *)aString
{
[aString retain];
[searchString release];
searchString=aString;
}
我已经使用 NSLog 来检查事情是否按照他们应该的方式发生并且一切看起来都很好。但是,它仍然没有做我想要的。
[自我重新排列对象]; 应该调用arrangeObjects 方法,但没有。我必须明确地称呼它(即[matchesArrayControllerarrangeObjects:matchesPopUpArrayData];)
即便如此,尽管过滤对象按照预期的方式进行了更改,但下拉列表并没有按照我想要的方式进行更新。