On 2009 Jul 08, at 16:20, Quincey Morris wrote:

Excuse me while I put on my properties-are-behavior crusader's hat. :)

OK, I get it. Since we don't always use @synthesize, @dynamic, or Xcode's "Scripts" menu (noting the if() test in this implementation) ...

- (void)setName:(NSString *)value {
    if (name != value) {
        [name release];
        name = [value copy];
    }
}

the property can be a behavior.

When undoing an action, all setters that were called during the action need to be called again, in the correct order, even if the getter value doesn't change as a result.

Maybe this is one of the reasons why it is quite common nowadays that when a user clicks "Undo" 10 times, something is seen to happen on only 5 or 6 of the clicks.

On 2009 Jul 08, at 16:49, Kiel Gillard wrote:

To prevent this behaviour, you could override setName: to only change the value when the pointers are not the same.

In other words, return before the -willChangeValueForKey tells KVO about it. Actually, I've done that on occasion. Yes, the filtering can be done on the front end instead of the back end. That's a good thing to keep in mind.

Thanks to all who replied. I don't feel so bad about having to do the filtering now.

_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to