On Jan 10, 2009, at 1:00 PM, John Love wrote:

-performSelectorOnMainThread:withObject:waitUntilDone:, according to Apple docs, is passed a SEL method that "should not have a significant return value".

I wish it to return a INT and I figure that that qualifies as in- significant. Given that assumption, my real question is how to implement it. I call:

[self performSelectorOnMainThread:@selector:mySimpleSelector withObject:nil waitUntilDone:YES];

(int) mySimpleSelector {
        if (whatever) return 0;
        else          return 1;
}

via my call to -performSelectorOnMainThread, just how do I access - mySimpleSelector's returned INT? The simplest answer is to not have a return value at all, but rather store the INTs in a global; but I figure there is no time like the present to learn to solve this problem the right way.

You can't use performSelectorOnMainThread and get at the return value. You'll have to create and use an NSInvocation object to get at the return value.

NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[obj methodSignatureForSelector:mySelector]];
[inv setTarget:obj];
[inv setSelector:mySelector];
// if you have arguments, set them up here
[inv setArgument:&addressOfSomeArgument atIndex:2]; // starting at 2, since 0 is the target and 1 is the selector

int myReturnValue;
[inv setReturnValue:&myReturnValue];

[inv performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES];
NSLog(@"return value: %@", myReturnValue);


Ashley

_______________________________________________

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