5 Stimmen

Objective-C-Formatierungsstil verursacht einen Fehler in einem Switch-Case

Ich erhalte einen Fehler in meiner switch-Anweisung mit einigen mehrzeiligen Objective-c-Code:

- (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;
    }
}

Wenn ich die Zeile mit dem NSLog funktioniert es gut. Was ist die Ursache für diesen Fehler? Gibt es eine Möglichkeit, diese Art der Formatierung zu verwenden?

20voto

kennytm Punkte 488916

Sie sollten eine Variable nicht in einer switch case es sei denn, Sie führen einen Anwendungsbereich ein.

    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;
    } // <--

Der eigentliche Fehler liegt darin, dass im C-Standard (§6.8.1) ein Label nur von einer Anweisung gefolgt werden kann ( NSLog(@"Mail Failed") ), nicht eine Erklärung ( UIAlertView* alert = ... ).

9voto

Joshua Weinberg Punkte 28440

Das Problem liegt in der Definition des Begriffs "Schalter". Sie können keine Variablendeklaration in der Zeile nach dem case haben. Sie können das Problem lösen, indem Sie den gesamten case in einen neuen Bereich einschließen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X