2011-12-13 94 views
84

得到了以下的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 

但是一个错误:

Error

回答

34

一般情况下,你永远不应该在case体内声明变量,除非你包的情况下身体{}。大多数C编译器会在几种情况下将其标记为错误(虽然通常是一个非常模糊的声音错误)。

原因是编译器无法知道变量的范围在哪里结束,如果您在第一个case正文中有声明,那么它看起来像第二个case是到第变量的作用域,使编译器不知道应该如何初始化它。