2012-03-30 18 views
6

Di seguito è riportata un'istruzione Switch/Case che visualizza un messaggio di errore quando non è possibile inviare un'e-mail. Per la maggior parte, tutto sembra giusto, ma quando ho posto un UIAlertView nella dichiarazione switch ottengo un errore in Xcode:Utilizzo di un'istruzione switch 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; 
} 

Perché si genera un errore quando ho posto il codice all'interno del case?

+0

un'occhiata a [inserire descrizione collegamento qui] [1] [1]: http://stackoverflow.com/questions/366073/instantiating-new-object-within-switch-block-why- does-it-fail – TompaLompa

+0

No, UIAlertView non ha bisogno di un IBAction. – c0d3Junk13

+0

possibile duplicato di [Quando si converte un progetto per utilizzare ARC, cosa significa "switch case è in ambito protetto"?] (Http://stackoverflow.com/questions/7562199/when-converting-a-project-to-use- arc-cosa-fa-switch-case-is-in-protected-scop) – ughoavgfhw

risposta

14

Mettilo tra parentesi:

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

perché? per favore spiegate –

+0

Vedere la risposta di @Phillip Mills o effettuare una ricerca, e troverete molte spiegazioni. – bandejapaisa

+0

Ok ho capito .......... –

12

Il problema sta dichiarando le variabili all'interno di casi di un interruttore. Il compilatore è preoccupato di cercare di capire l'ambito quando viene eseguito solo parte del codice. Se metti parentesi attorno al contenuto del caso 'fail', dovrebbe essere OK poiché limita l'ambito.