Cas dans le commutateur protégé

Duplication possible:
Lors de la conversion d’un projet pour utiliser ARC, que signifie «switch case est dans la scope protégée»?

Vous avez le code suivant: Mais quand j’essaye de mettre quelque chose dans le cas 1 (ou vide), cela me donne une erreur?

Problème étrange parce que je ne sais pas ce qu’est un commutateur protégé et comment je devrais le réparer. Est-ce que quelqu’un a une solution ou un indice pour résoudre ce problème? Bizarre..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *controller; switch(indexPath.row) { case 0: NSLog(@"0"); //create instance of EKEventStore EKEventStore *eventStore = [[EKEventStore alloc] init]; //creating instance of EKEvent EKEvent *event = [EKEvent eventWithEventStore:eventStore]; //setting the appropriate properties of the new event event.title = @"Woow"; //event.startDate = [[NSDate alloc] init]; NSDateComponents *myDate2 = [[NSDateComponents alloc] init]; [myDate2 setDay:13]; [myDate2 setMonth:12]; [myDate2 setYear:2011]; [myDate2 setHour:00]; [myDate2 setMinute:34]; event.startDate = [[NSCalendar currentCalendar] dateFromComponents:myDate2]; event.endDate = [[NSDate alloc] initWithTimeInterval:3600 sinceDate:event.startDate]; event.location = @"game2"; event.notes = @" game"; event.alarms = [NSArray arrayWithObject:[EKAlarm alarmWithAbsoluteDate:event.startDate]]; [event setCalendar:[eventStore defaultCalendarForNewEvents]]; NSError *error; [eventStore saveEvent:event span:EKSpanThisEvent error:&error]; break; case 1: NSLog(@"1"); break; } { self.EKController.title = [self.EKList objectAtIndex:[indexPath row]]; } } @end 

Mais une erreur:

Erreur

Vous devez envelopper chaque instruction de commutateur avec des accolades {} . Par exemple:

 switch (someInt) { case 0: { NSLog(@"Case 0"); } break; case 1: { NSLog(@"Case 1"); } break; } 

Cela a déjà été répondu ici – Au moment de convertir un projet pour utiliser ARC, que signifie “changer de boîtier dans la scope protégée”?

En général, vous ne devez jamais déclarer de variables dans un corps de case , à moins que vous ne mettiez le corps du casse dans {} . La plupart des compilateurs C le signalent comme une erreur dans plusieurs circonstances (bien que souvent une erreur de sondage très obscure).

La raison en est que le compilateur ne peut pas dire où la scope de la variable se termine, et si vous avez une déclaration dans le premier corps de case , il semble que le deuxième case soit une twig au milieu de la scope de la variable. le compilateur se demande comment / s’il doit être initialisé.