web-dev-qa-db-fra.com

Boîtier en interrupteur protégé

Duplicata possible:
Lors de la conversion d'un projet pour utiliser ARC, que signifie "le commutateur est dans la portée protégée"?

Vous avez le xcode suivant: Mais quand j'essaie 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 dois le réparer. Quelqu'un a-t-il 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:

Error

83
Blazer

Vous devez encapsuler chaque instruction switch avec {} 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 par la manière - Lors de la conversion d'un projet pour utiliser ARC, que signifie "le commutateur est dans la portée protégée"?

201
mattjgalloway

En général, vous ne devez jamais déclarer de variables à l'intérieur d'un corps case, sauf si vous enveloppez le corps du cas dans {}. La plupart des compilateurs C signalent cela comme une erreur dans plusieurs circonstances (bien que souvent une erreur très obscure).

La raison en est que le compilateur ne peut pas dire où se termine la portée de la variable, et si vous avez une déclaration dans le premier corps case, il semble que le second case est un branche au milieu de la portée de la variable, ce qui fait que le compilateur se demande comment/si elle doit être initialisée.

34
Hot Licks