Re: KVC broken in 10.4.4 on Intel?
Re: KVC broken in 10.4.4 on Intel?
- Subject: Re: KVC broken in 10.4.4 on Intel?
- From: Da Woon Jung <email@hidden>
- Date: Mon, 30 Jan 2006 16:38:56 +0900
2006/1/30, Scott Ellsworth wrote:
>
> On Jan 29, 2006, at 6:07 PM, Da Woon Jung wrote:
>
> > 2006/1/30, Shawn Erickson wrote:
> >>
> >> On Jan 28, 2006, at 6:30 PM, Da Woon Jung wrote:
> >>
> >>> Hi,
> >>>
> >>> On my PowerBook G4 (PPC), the following works fine:
> >>>
> >>> - (void)setFaintestVisible: (float)aValue
> >>> {
> >>> NSLog(@"%f", aValue);
> >>> }
> >>>
> >>> //...elsewhere, inside a method...
> >>>
> >>> [self setValue:[NSNumber numberWithFloat: 7.9f]
> >>> forKey:@"faintestVisible"];
> >>>
> >>> // Prints 7.900000
> >>
> >> In the above why not just do...
> >>
> >> [self setFaintestVisible:7.9f];
> >>
> >> If someone is using KVO they will still get notified of the change if
> >> you use your accessor directly.
> >
> > That would defeat the purpose somewhat of using KVC.
>
> Not for the example you showed us. Your accessor only takes a float,
> not an NSNumber, and NSNumbers do not autoconvert to floats. (If I
> am wrong about that, I would love a doc pointer, but ISTR that there
> is no reason for the above to work when sent an NSNumber*. The
> calling conventions on Intel are different than on PPC, which brings
> out the above behavior.
>
> I suspect that
>
> >>> [self setValue:[[NSNumber numberWithFloat: 7.9f] floatValue]
> >>> forKey:@"faintestVisible"];
>
> would get the results you expect, as that is the accessor you are
I didn't know that you could call setValue:(id)aValue forKey:(NSString
*)aKey with a bare scalar value for aValue (which your above line of
code seems to achieve). According to the original Apple doc I quoted
(http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/DataTypes.html#//apple_ref/doc/uid/20002171),
it seems to make it fairly clear that I have to pass an id (NSObject
or any derived type, like NSNumber) and then "the [scalar] value is
extracted from the passed object using the appropriate -<type>Value
method".
> Also, why _not_ use setValue:forKey:? Do you have any _set<key>
> setters in your code?
No, I'm using takeValue:forKey because I'm still targeting 10.2 for
ppc. An #ifdef would allow me to use setValue:forKey: for Intel
compiles, but would using setValue:forKey: make a difference? I'm
still looking for any documentation that says it would.
Cheers,
DW
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden