无法确定的UISharedApplication错误

时间:2010-01-03 10:05:05

标签: iphone objective-c switch-statement uiapplicationdelegate

-(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之前表达”。

我似乎无法理解为什么这不会编译。感谢任何意见..提前感谢。

2 个答案:

答案 0 :(得分:3)

不要在switch语句中定义变量(currentObject)。

答案 1 :(得分: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语句不会自动提供。如果在该上下文中创建任何对象,请记住删除/释放对象,否则这是一种容易导致内存泄漏的方法。

如果你问我,我个人总是在我的案例陈述中使用大括号;)你永远不知道将来你是否需要它们,这会让事情变得更容易理解。