0
-(void) setupMyLocation {

NSArray *viewControllerArray = [navigationUpdateFromDetail.navigationController viewControllers];
NSUInteger parentViewControllerIndex = [viewControllerArray count] - 2;
NSLog(@"Parent view controller: %@", [viewControllerArray objectAtIndex:parentViewControllerIndex]);

switch(parentViewControllerIndex){
    case 0:

    self.myLocation = navigationUpdateFromDetail.currentLocation;
        break;
    case 1:
        YANAVAppDelegate *currentObject = (YANAVAppDelegate*)[[UIApplication sharedApplication]delegate];

    //  self.myLocation = currentObject.givenLocation;

        break;
    default: break;
}

}       

「YANAVAppdelegateの前に式を期待しています」というエラーが発生し続ける理由を理解できないようです。

なぜこれがコンパイルされないのか、私にはわかりません。ご意見をお待ちしております。よろしくお願いします。

4

2 に答える 2

3

switch ステートメント内で変数 (currentObject) を定義しないでください。

于 2010-01-03T10:12:18.777 に答える
1

case ステートメント内で変数を定義する必要がある場合は、中かっこを使用して定義できます (ちなみに、この手法は C++ でも機能します)。

-(void) setupMyLocation {

    NSArray *viewControllerArray = [navigationUpdateFromDetail.navigationController viewControllers];
    NSUInteger parentViewControllerIndex = [viewControllerArray count] - 2;
    NSLog(@"Parent view controller: %@", [viewControllerArray objectAtIndex:parentViewControllerIndex]);

    switch(parentViewControllerIndex) {
        case 0:
            self.myLocation = navigationUpdateFromDetail.currentLocation;
            break;

        case 1:
        {
            YANAVAppDelegate *currentObject = (YANAVAppDelegate*)[[UIApplication sharedApplication]delegate];

        //  self.myLocation = currentObject.givenLocation;

            break;
        }

        default: 
            break;
    }
}       

C++ の第一人者は、これにより、switch / case ステートメントでは自動的に提供されない、変数が存在するためのコンテキスト スタックが提供されると説明してくれました。そのコンテキストでオブジェクトを作成する場合は、オブジェクトを削除/解放することを忘れないでください。そうしないと、メモリリークが発生しやすくなります。

あなたが私に尋ねるならば、私は個人的に私のケースステートメントで常に中括弧を使用します;)将来それらが必要になるかどうかはわかりませんが、それは物事を理解しやすくします.

于 2010-01-03T14:27:37.520 に答える