0

以下のように入力したのですが、case 0 以降の行で期待される表現と、宣言されていない識別子 "bundle" を使用しているというエラーが表示されます。問題の内容と解決方法を誰かに教えてもらえますか?

どうもありがとうございました。

-(IBAction) segmentedControlIndexChanged{
    switch (self.segmentedControl.selectedSegmentIndex) {
        case 0:
            NSBundle *bundle = [[NSBundle alloc ]init];
            NSString *path = [bundle pathForResource:@"HK" ofType:@"plist"];
            placeArray = [[NSArray alloc] initWithContentsOfFile:path];
            break;            
        case 1:
            NSLog(@"case 1");
            break;
        case 2:
            NSLog(@"case 2");
            break;
        case 3:
            NSLog(@"case 3");
            break;
        case 4:
            NSLog(@"case 4");
            break;
        default:
            break;
    }
}
4

3 に答える 3

4

適用するスコープをコンパイラが認識できるように、いくつかの括弧が必要です。

case 0:
{
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *path = [bundle pathForResource:@"HK" ofType:@"plist"];
    placeArray = [[NSArray alloc] initWithContentsOfFile:path];
    break; 
}

alloc initまた、 onは使用しないでくださいNSBundle。(上記のように)を取得するかmainBundle、アプリで他のバンドルを具体的に取得する必要があります。

于 2013-06-23T15:49:50.333 に答える
1

caseブロックの最初の行に変数宣言があります。ブロックを中かっこで囲みます。

case 0:
{
    NSBundle *bundle = [[NSBundle alloc ]init];
    NSString *path = [bundle pathForResource:@"HK" ofType:@"plist"];
    placeArray = [[NSArray alloc] initWithContentsOfFile:path];
    break;
}

このSOの質問を参照してください。

于 2013-06-23T15:50:42.777 に答える
0
NSBundle *bundle = [NSBundle mainBundle];

が正しい方法です。

于 2013-06-23T15:47:59.347 に答える