在保护开关的情况下

可能重复:
在转换项目使用ARC时,“switch case in protected scope”是什么意思?

得到了下面的xcode:但是当我试图把案件1(或空)它给我一个错误?

奇怪的问题,因为我不知道什么是一个受保护的开关,以及我应该如何解决它。 有没有人有解决scheme或线索解决这个问题? 奇怪的..

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

但是一个错误:

错误

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

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

顺便说一下这里已经回答了 – 转换工程使用ARC的时候什么是“switch case in protected scope”呢?

一般case ,除非您将案例主体封装在{} ,否则不应该在case体内声明variables。 大多数C编译器会在几种情况下将其标记为错误(尽pipe通常是一个非常模糊的错误)。

原因是编译器无法知道variables的作用域在哪里结束,如果在第一个case体中有一个声明,那么看起来第二个case就是variables作用域中间的一个分支,编译器不知道如何/如果它应该被初始化。