Использование оператора Switch в Obj-C - PullRequest
6 голосов
/ 30 марта 2012

Ниже приведен оператор Switch / Case, который отображает сообщение об ошибке, когда электронное письмо не может быть отправлено. По большей части все кажется правильным, но когда я помещаю UIAlertView в оператор Switch, я получаю ошибку в Xcode:

Xcode error

switch (result) {
    case MFMailComposeResultCancelled:
        NSLog(@"Result: Mail sending canceled");
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Result: Mail sending failed");
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed"
                                                          message:@"The email could not be sent."
                                                         delegate:nil
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];

        [message show];
        break;
    default:
        NSLog(@"Result: Mail not sent");
        break;
}

Почему выдается ошибка, когда я помещаю код в case?

Ответы [ 2 ]

14 голосов
/ 30 марта 2012

Укажите в скобках:

case MFMailComposeResultFailed: {
    NSLog(@"Result: Mail sending failed");
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed"
                                                      message:@"The email could not be sent."
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];

    [message show];
    break;
  }
12 голосов
/ 30 марта 2012

Проблема заключается в объявлении переменных внутри случаев переключения.Компилятор расстроен попыткой выяснить область действия, когда выполняется только часть кода.Если вы поместите квадратные скобки вокруг содержимого «сбойного» случая, все должно быть в порядке, поскольку это ограничивает область действия.

...