2011-12-13 39 views
84

Got the xcode sau: Nhưng khi tôi cố gắng để đưa một cái gì đó trong trường hợp 1 (hoặc trống) nó đem lại cho tôi một lỗi?Trường hợp trong công tắc bảo vệ

Vấn đề lạ vì tôi không biết chuyển đổi được bảo vệ là gì và cách tôi nên khắc phục sự cố. Có ai có một giải pháp hoặc đầu mối để sửa lỗi này? Weird ..

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

Nhưng một lỗi:

Error

Trả lời

201

Bạn nên quấn mỗi câu lệnh switch với {} niềng răng. Ví dụ:

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

này đã được trả lời đã ở đây bằng cách này - When converting a project to use ARC what does "switch case is in protected scope" mean?

+2

Không cần thiết phải bọc EVERY chuyển đổi thành '{}', chỉ những biến khai báo biến (một cách rõ ràng hoặc thông qua một sự biến đổi macro hoặc trình biên dịch). ARC có khá ít việc phải làm với nó. –

34

Nói chung, bạn không bao giờ nên khai báo các biến bên trong một cơ thể case, trừ khi bạn quấn cơ thể trường hợp trong {}. Hầu hết các trình biên dịch C sẽ gắn cờ đó là một lỗi trong một số trường hợp (mặc dù thường là một lỗi rất tối nghĩa).

Lý do cho điều này là trình biên dịch không thể biết phạm vi của biến kết thúc, và nếu bạn có khai báo trong phần đầu tiên case thì có vẻ như là chi nhánh thứ hai case phạm vi của biến, làm cho trình biên dịch tự hỏi làm thế nào/nếu nó cần được khởi tạo.

Các vấn đề liên quan