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 回答