I’d like to have an NSArray or NSMutableArray that always shows a filtered view of a data set. That is, if the filter is set to “show me things with the letter a”, and an item “blah” is added, that item would automatically show up in the list. However, if “bluh” were added, it would not show up in the filtered list (but would still really be there in the underlying dataset).
I see that there are filter methods on NSArray and NSMutableArray, but these are one shot methods. That is, the filter occurs when you call the method and never again (unless of course you call the filter method again).
I’m coming from the Java world, were I used Glazed Lists extensively for this kind of thing. I was hoping for a similar solution baked into Cocoa.
You’ll most likely want to use NSArrayController as suggested by Ole.
You can use
setFilterPredicate:on it as suggested, and then you’ll want to access the objects by callingarrangedObjectson the controller. You don’t needsetAutomaticallyRearrangesObjects:unless you’re intending to have your data sorted (using sort descriptors — NSSortDescriptor instances).NSArrayController is really set up to handle displaying things in a table view very easily, so if that’s your end goal, then this is exactly what you want. It integrates nicely with NSSearchField to handle predicates in the UI.
If you’re using this as some back end object that’s getting passed around, then you might want to write something yourself that’s a little less heavy-weight than NSArrayController.