On Oct 19, 2013, at 9:27 AM, Jerry Krinock wrote: >> I don't know if this is a common technique but I use it regularly to track >> binding changes. >> >> - (void)setValue:(id)value forKeyPath:(NSString *)keyPath >> { >> // all bindings that reference self (such as self.representedObject.xxx) >> // will pass through this method >> if ([keyPath rangeOfString:@"self.representedObject."].location != >> NSNotFound) { >> [self.document updateChangeCount:NSChangeDone]; >> } >> [super setValue:value forKeyPath:keyPath]; >> } > > That's interesting and I've never seen it done. > > I'd call it a variation of writing custom accessors for each attribute. > Custom accessors for each attribute have the advantage of reliably catching > all model changes, not just those driven by Cocoa Bindings. But your > technique is way less code, by a factor of the number of attributes, and > requires zero maintenance.
I've done it / do it in one particular project in one spot out of notable convenience. It works, but only for modifications using KVC, and I do recall having at least one bug where a modification wasn't using KVC and wasn't triggering the code I was expecting it to. I gag a little whenever I remember that's how it works, but at this point it ain't broke so I'm not going to tempt fate by fixing it. ;-) -- Seth Willits _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com