1

単純な問題...コードにコメントがあり、それらを削除してエラーが発生しました。数時間後、私は情報源に到着しました。

このコードは機能します:

switch (indexPath.row) {
    case 0:
        NSLog(@"case 0");
        break;
    case 1: // Clients
        NSLog(@"case 1");

        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}

この次のもの(NSLog(@ "case 1");を削除するだけで)は機能しません:

switch (indexPath.row) {
    case 0:
        NSLog(@"case 0");
        break;
    case 1: // Clients


        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}

ご覧のとおり、NSLog行のみがなくなっています。そして、コンパイラは私に2つのエラーを出します:

RootViewController.m:212:エラー:「ViewClientListTableController」の前に式が必要です

RootViewController.m:213:エラー:'viewListTableController'が宣言されていません(この関数での最初の使用)

もちろん、1つの答えはNSLog行を残すことですが、実際には...なぜこのエラーが発生するのですか?

4

3 に答える 3

3

switchステートメントでは、ケースラベルで変数を宣言する際に問題が発生することがよくあります。私は賭けます

{
        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];
}

ケース1で機能します:-NSLogマクロには、おそらく同様の効果を持つ拡張があります。

于 2010-09-30T06:14:11.473 に答える
1

私はいつもこの問題を抱えています。ブラケットがないと、ケースラベル内の最初の行で新しい変数を宣言できないと思います{}

case 1: // Clients
{

        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}
于 2010-09-30T06:22:52.843 に答える
0

switch-caseステートメントを使用するとき、私もその問題に直面しました。「ViewClientListTableController*viewListTableController = [[ViewClientListTableControlleralloc]init];」の前にセミコロンを記述した場合 "; ViewClientListTableController * viewListTableController = [[ViewClientListTableController alloc] init];"のような文の場合、おそらくエラーはもうないことがわかります。理由は正確にはわかりませんが、問題は解決します。

于 2010-09-30T06:22:17.883 に答える