При написании кода существует много ситуаций, которые должны рассматриваться как ошибки времени выполнения: 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 контроллера представления)?