保护开关的情况

Bla*_*zer 83 objective-c switch-statement

可能重复:
将项目转换为使用ARC时,"switch case是否在受保护的范围内"是什么意思?

得到以下xcode:但是当我尝试在案例1(或空)中放置一些东西时,它给了我一个错误?

奇怪的问题,因为我不知道受保护的交换机是什么以及我应该如何解决它.有没有人有解决方案或线索来解决这个问题?奇怪的..

- (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
Run Code Online (Sandbox Code Playgroud)

但是一个错误:

错误

mat*_*way 201

你应该用{}大括号包装每个switch语句.例如:

switch (someInt) {
    case 0:
    {
        NSLog(@"Case 0");
    }
    break;
    case 1:
    {
        NSLog(@"Case 1");
    }
    break;
}
Run Code Online (Sandbox Code Playgroud)

顺便提一下,这已经得到了解答 - 当转换项目使用ARC时,"切换案例是否在受保护范围内"是什么意思?

  • 没有必要在`{}`中包含每个开关,只包括那些声明变量(显式或通过宏或编译器混合)的开关.ARC与它相关性很小. (2认同)

Hot*_*cks 34

通常,case除非将case体包装在体内,否则不应在体内声明变量{}.大多数C编译器会在几种情况下将其标记为错误(尽管通常是一个非常模糊的错误).

原因是编译器无法分辨变量范围的结束位置,如果在第一case个体中有声明,那么它看起来就像第二个case是变量范围中间的分支,从而使编译器想知道如何/是否应该初始化.