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

Reply via email to