Handling exceptions raised during method called via NSObject's performSelectorOnMainThread:withObject:waitUntilDone:

StackOverflow https://stackoverflow.com/questions/155171

Question

What happens to exceptions raised while in myMethod: if it is invoked via NSObject's performSelectorOnMainThread:withObject:waitUntilDone:?

In particular, can I catch them in the scope of the call to performSelectorOnMainThread like this...

@try {
    [self performSelectorOnMainThread:@selector(myMethod) withObject:nil waitUntilDone:YES];
} @catch(NSException *e) {
    //deal with exception raised in myMethod here??
}

I realize that the semantics of this are weird if waitUntilDone is NO.

Was it helpful?

Solution

You won't be able to catch them like that. Cocoa may catch and log the exceptions to the console, but it won't re-raise them in the thread that called -perform. Instead, you could catch them in -myMethod: (or a wrapper that calls -myMethod:) and have it store them somewhere that your other thread can read them.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top