web-dev-qa-db-ja.com

保護されたスイッチのケース

可能性のある複製:
ARCを使用するようにプロジェクトを変換する場合、「switch case is protected scope」とはどういう意味ですか?

次の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

83
Blazer

各switchステートメントを{}中括弧でラップする必要があります。例えば:

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

これはすでにここで答えられています- ARCを使用するようにプロジェクトを変換するとき、「スイッチケースは保護されたスコープ内にある」とはどういう意味ですか?

201
mattjgalloway

一般に、ケース本体を{}でラップしない限り、case本体内で変数を宣言しないでください。ほとんどのCコンパイラは、いくつかの状況下でエラーとしてフラグを立てます(多くの場合、非常に不明瞭なエラーです)。

これは、変数のスコープがどこで終わるかをコンパイラが判断できないため、最初のcase本体に宣言がある場合、2番目のcaseは変数のスコープの真ん中に分岐し、コンパイラに初期化の方法/方法を疑問視させます。

34
Hot Licks