Re: Getting notified of any change to a specific NSManagedObject?
Re: Getting notified of any change to a specific NSManagedObject?
- Subject: Re: Getting notified of any change to a specific NSManagedObject?
- From: Kyle Sluder <email@hidden>
- Date: Fri, 16 Nov 2012 14:34:18 -0800
On Fri, Nov 16, 2012, at 02:00 PM, Rick Mann wrote:
>
> On Nov 16, 2012, at 2:31 , Mike Abdullah <email@hidden>
> wrote:
>
> > Why are you trying to avoid "a bunch of" these calls? Is it just to save yourself typing?
>
> Typing, and code maintenance. I generally have UI that displays all (or
> some subset of) the properties of one of my entities. I'd like that UI to
> update if anything updates one of the models. But if there are a dozen
> properties, then that's a dozen -addObserver and -removeObserver calls,
> in each place where there might be UI associated with it. If I later add
> a new property to the entity, I have to be sure to KVO, it, too. If I
> remove a bit of the UI, I have to remember to remove the call (not
> strictly, but I like keeping my code clean).
>
> Being able to subscribe once for all changes to a single object makes
> these problems go away.
FWIW, in an app I worked on that does not use Core Data but otherwise
has model objects with a dozen or so properties that are interesting to
a single observer, I wrote a few handy macros to walk over a static C
array of keypaths:
https://github.com/omnigroup/OmniGroup/blob/master/Frameworks/OmniBase/OBUtilities.h#L247
Then when I start observing a new model object, I can do something like
this:
static NSString interestingKeypaths[] = {@"keyPathOne", @"keyPathTwo"};
static void *ctx = &ctx;
- (void)_startObservingModelObject:(NSObject *obj) {
OB_FOR_IN(keyPath, interestingKeyPaths)
[obj addObserver:self forKeyPath:keyPath options:0 context:ctx];
}
- (void)_stopObservingModelObject:(NSObject *obj) {
OB_FOR_IN(keyPath, interestingKeyPaths)
[obj removeObserver:self context:ctx];
}
--Kyle Sluder
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden