2010-07-09 8 views
4

Je reçois une erreur dans mon instruction switch avec un objectif-c code multi-ligne:style de mise en forme Objective-c provoque une erreur dans un commutateur cas

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

Si je décommenter la ligne avec la NSLog, ça fonctionne bien. Quelle est l'origine de cette erreur? Est-il possible d'utiliser ce type de formatage?

Répondre

19

Vous ne devez pas déclarer une variable dans un switchcase sauf si vous introduisez une étendue.

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

L'erreur réelle est parce que dans la norme C (§ 6.8.1), une étiquette ne peut être suivie d'une déclaration (NSLog(@"Mail Failed")), et non une déclaration (UIAlertView* alert = ...).

+0

Merci pour la réponse. Rien à voir avec le formatage alors, mais la déclaration. –

9

Les problèmes sont liés à la définition du commutateur. Vous ne pouvez pas avoir une déclaration de variable sur la ligne suivant le cas. Vous pouvez le réparer en enveloppant l'ensemble du boîtier dans une nouvelle portée

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