Объективный-c стиль форматирования вызывает ошибку в случае переключателя

Я получаю ошибку в своем операторе переключения с некоторым многострочным Объективным-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, это хорошо работает. Что вызывает эту ошибку? Там какой-либо путь состоит в том, чтобы использовать этот вид форматирования?

5
задан MD XF 9 March 2017 в 16:18
поделиться

2 ответа

Вы не должны объявлять переменную в переключателе 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 = ... ).

20
ответ дан 18 December 2019 в 05:48
поделиться

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

    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;
    }
9
ответ дан 18 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: