Я получаю ошибку в своем операторе переключения с некоторым многострочным Объективным-c кодом:
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error
{
// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
break;
case MFMailComposeResultFailed:
// NSLog(@"Mail Failed");
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Error", @"Error")
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
otherButtonTitles:nil];
[alert show];
[alert release];
break;
default:
break;
}
}
Если я некомментирую строку с NSLog
, это хорошо работает. Что вызывает эту ошибку? Там какой-либо путь состоит в том, чтобы использовать этот вид форматирования?
Вы не должны объявлять переменную в переключателе
case
, если вы не вводите область видимости.
case MFMailComposeResultFailed: { // <--
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Error", @"Error")
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
otherButtonTitles:nil];
[alert show];
[alert release];
break;
} // <--
Фактическая ошибка связана с тем, что в стандарте C (§6.8.1) за меткой может следовать только оператор ( NSLog (@ "Mail Failed")
), но не объявление ( UIAlertView * alert = ...
).
Проблема заключается в том, как определяется переключатель. Вы не можете иметь объявление переменной в строке, следующей за регистром. Вы можете исправить это, заключив весь случай в новую область видимости
case MFMailComposeResultFailed:
{
// NSLog(@"Mail Failed");
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Error", @"Error")
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
otherButtonTitles:nil];
[alert show];
[alert release];
break;
}