2012-03-30 4 views
6

Unten ist eine Switch/Case-Anweisung, die eine Fehlermeldung anzeigt, wenn eine E-Mail nicht gesendet werden kann. In den meisten Fällen scheint alles in Ordnung, aber wenn ich einen UIAlertView in die Switch-Anweisung platzieren bekomme ich einen Fehler in Xcode:Verwenden einer Switch-Anweisung in Obj-C

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

Warum es ein Fehler generiert, wenn ich Code im Inneren des Lokals case?

+0

Blick auf [link Beschreibung hier eintragen] [1] [1]: http://stackoverflow.com/questions/366073/instantiating-new-object-within-switch-block-why- does-it-fail – TompaLompa

+0

Nein, UIAlertView benötigt keine IBAction. – c0d3Junk13

+0

mögliches Duplikat von [Beim Konvertieren eines Projekts zur Verwendung von ARC, was bedeutet "Groß-/Kleinschreibung im geschützten Bereich"?] (Http://stackoverflow.com/questions/7562199/when-converting-a-project-to-use-use- arc-was-ist-switch-case-is-in-protected-scop) – ughoavgfhw

Antwort

14

es in Klammern:

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

warum? erklären Sie bitte –

+0

Sehen @Phillip Mills beantworten oder eine Suche tun, und Sie finden viele Erklärungen. – bandejapaisa

+0

Ok ich habe es .......... –

12

Das Problem Variablen innerhalb von Fällen eines Schalters zu erklären. Der Compiler ist verärgert über den Versuch, den Umfang herauszufinden, wenn nur ein Teil des Codes ausgeführt wird. Wenn Sie Klammern um den Inhalt des Fehlers legen, sollte es OK sein, da dies den Bereich einschränkt.