Re: Properties, read only and bindings
Re: Properties, read only and bindings
- Subject: Re: Properties, read only and bindings
- From: Steven W Riggins <email@hidden>
- Date: Wed, 6 Aug 2008 22:23:27 -0700
Aha!
I was missing the willChangeForKey: call.
- (IBAction) toggleIsCloning: (id) sender
{
[self willChangeValueForKey:@"cloningLabel"];
self.isCloning = !self.isCloning;
[self didChangeValueForKey:@"cloningLabel"];
}
Now it works fine, thanks!
On Aug 6, 2008, at 10:07 PM, Bill Bumgarner wrote:
On Aug 6, 2008, at 9:51 PM, Steven W Riggins wrote:
I'm winding my way through KVO, readonly properties and bindings.
I have an object which has a bool state. I have a method that
toggles that state.
I have a button that calls the method that toggles the state. The
button has a title, which I've bound to a readonly property, which
has a getter that returns a localized label based on the state.
So when I change the state, obviously the readonly property doesn't
change, and thus the button label does not change.
Changing the readonly property to a normal ivar works fine.
Is there a way to use a synthesized property in this manner, or is
it even proper?
You can solve this in the following two ways (amongst others):
(1) Redeclare the property as readwrite in a class extension in
your .m file and then use dot syntax or the synthesized setter/
getter to set the value.
I.e.
.h:
@interface Foo : NSObject
{
BOOL f;
}
@property(readonly, nonatomic) BOOL f;
@end
.m
@interface Foo()
@property(readwrite, nonatomic) BOOL f;
@end
@implementation Foo
@synthesize f;
// ... use the setter and getter as needed
@end
(2) Call willChange/didChange before/after you change the value:
- (void) toggle: sender
{
.... logic ...
[self willChangeValueForKey: @"f"];
f = ... new state ...;
[self didChangeValueForKey: @"f"];
}
b.bum
_______________________________________________
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