using KVO to update an NSTableView filtered by an NSPredicate

Posted by KingRufus on Stack Overflow See other posts from Stack Overflow or by KingRufus
Published on 2010-05-20T03:17:34Z Indexed on 2010/05/20 9:00 UTC
Read the original article Hit count: 243

My UI is not updating when I expect it to.

The application displays "projects" using a view similar to iTunes -- a source list on the left lets you filter a list (NSTableView) on the right. My filters update properly when they are examining any simple field (like name, a string), but not for arrays (like tags).

I'm removing a tag from one of my objects (from an NSMutableArray field called "tags") and I expect it to disappear from the list because it no longer matches the predicate that is bound to my table's NSArrayController.

ProjectBrowser.mm:

self.filter = NSPredicate* srcPredicate = 
              [NSPredicate predicateWithFormat:@"%@ IN %K", 
                                               selectedTag, 
                                               @"tags"];

Project.mm:

[self willChangeValueForKey:@"tags"];
[tags removeAllObjects];
[self didChangeValueForKey:@"tags"];

I've also tried this, but the result is the same:

[[self mutableArrayValueForKey:@"tags"] removeAllObjects];

Interface Builder setup:

  • a ProjectBrowser object is the XIB's File Owner
  • an NSArrayController (Project Controller) has its Content Array bound to "File's Owner".projects
  • Project Controller's filter predicate is bound to "File's Owner".filter
  • NSTableView's column is bound to "Project Controller".name

© Stack Overflow or respective owner

Related posts about cocoa

Related posts about objective-c