Wednesday, February 8, 2012

iPhone - How to handle errors at runtime


When writing code, there are many situations that must be treated as runtime errors : an alloc/init returns nil, a resource is not found, a [someClass canDoThis] returns NO for an absolutely-needed feature where YES would be the natural answer, ...



For all these situations, I have written an exitWithMessage routine (that displays an alert box), and each class has a kill method that frees allocated memory.



So... When in an init method, you have these kind of exceptions, I supposed you could do :




[self kill];
[OneClass exitWithFatalErrorMessage];
return nil;

- (void) exitWithFatalErrorMessage:(NSString*)message
{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:NSLocalizedStringFromTable(@"Error" @"ErrorMessages", @"") message:message delegate:self cancelButtonTitle:NSLocalizedStringFromTable(@"Understood", @"ErrorMessages", @"") otherButtonTitles: nil];
[alert show];
[alert release];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// stop the normal running of the app, there is a situation that would prevent it
}

- (void)kill
{
self.member = nil;
self.member2 = nil;
...
}



But this does not work... My alert is not displayed (the exitWithMessage works fine when used anywhere else than into an init method.



How would you handle those cases ? Is this piece of coding a fine way to do ?

If yes, why does my alert do not display (I'm into a view controller initWithCoder method for the example) ?

1 comment:

  1. Are you actually calling the exitWithFatalErrorMessage method, because in your code you call exitWithMessage instead, try changing it to this:

    [OneClass exitWithFatalErrorMessage:@"Message"];

    ReplyDelete