[Pyobjc-dev] Re: [Pythonmac-SIG] pyobjc / cocoa
bbum@mac.com
bbum@mac.com
Wed, 16 Oct 2002 17:45:32 -0400
On Wednesday, October 16, 2002, at 05:27 PM, Bob Ippolito wrote:
>> rt.call() concatenates the method name as "drawSelfAtPoint: color:
>> withSize:". Then the runtime sends a message to the object to perform
>> the selector "@sel (drawSelfAtPoint: color: withSize:)", and the
>> object says, it can't.
The two are identical in the context of @selector(), but not
NSSelectorFromString. Odd. A bugreport.apple.com report has been
filed.
Consider this output:
2002-10-16 17:42:19.198 bar[9636]
pathForResource:ofType:inDirectory:forLocalization: ==
pathForResource:ofType:inDirectory:forLocalization:
2002-10-16 17:42:19.232 bar[9636]
pathForResource:ofType:inDirectory:forLocalization: != pathForResource:
ofType: inDirectory: forLocalization:
From this code:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SEL sel1 =
@selector(pathForResource:ofType:inDirectory:forLocalization:);
SEL sel2 = @selector(pathForResource: ofType: inDirectory:
forLocalization: );
SEL sel3 =
NSSelectorFromString(@"pathForResource:ofType:inDirectory:forLocalizatio
n:");
SEL sel4 = NSSelectorFromString(@"pathForResource: ofType:
inDirectory: forLocalization: ");
if (sel1 == sel2)
NSLog(@"%@ == %@", NSStringFromSelector(sel1),
NSStringFromSelector(sel2));
else
NSLog(@"%@ != %@", NSStringFromSelector(sel1),
NSStringFromSelector(sel2));
if (sel3 == sel4)
NSLog(@"%@ == %@", NSStringFromSelector(sel3),
NSStringFromSelector(sel4));
else
NSLog(@"%@ != %@", NSStringFromSelector(sel3),
NSStringFromSelector(sel4));
[pool release];
return 0;
}
Seems like a bit of a discontinuity between the way the two work.
>>
>> Am I understanding you correctly? Because, the way I see it, this is
>> likely to encourage runtime errors (unknown selector).
>
> That's not a case of ambiguity, that's just Programmer Error. Unknown
> selector is what they *should* get for issuing the selectors in an
> incorrect order. Notice that he's using ordered list arguments, not
> dictionary arguments for his call function.
In that you are correct -- an array of arguments could be interpreted
in this fashion.
However, I completely fail to see how...
rt.call(obj, "drawSelfAtPoint", p, "color", c, "withSize", "s")
... is cleaner/clearer/better than...
obj.drawSelfAtPoint_color_withSize_(p, c, s)
b.bum