iPhone - Как обрабатывать ошибки во время выполнения - PullRequest
1 голос
/ 07 февраля 2012

При написании кода существует много ситуаций, которые должны рассматриваться как ошибки времени выполнения: alloc / init возвращает nil, ресурс не найден, [someClass canDoThis] возвращает NO для абсолютно необходимой функции, где YES будетестественный ответ, ...

Для всех этих ситуаций я написал подпрограмму exitWithMessage (которая отображает окно предупреждения), и у каждого класса есть метод kill, который освобождает выделенную память.

Итак ... Когда в методе init у вас есть такие исключения, я предположил, что вы могли бы сделать:

[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;
    ...
}

Но это не работает ... Мое предупреждение не отображается(exitWithMessage отлично работает, когда используется где-либо еще, кроме метода init.

Как бы вы справились с этими случаями? Является ли этот фрагмент кода хорошим способом?
Если да, почему мое предупреждение делаетне отображается (для примера я использую метод initWithCoder контроллера представления)?

1 Ответ

0 голосов
/ 07 февраля 2012

Вы действительно вызываете метод exitWithFatalErrorMessage, потому что вместо этого в своем коде вы вызываете exitWithMessage, попробуйте изменить его следующим образом:

[OneClass exitWithFatalErrorMessage:@"Message"];
...