iOS - 访问未知视图控制器中的属性

时间:2014-08-04 14:17:46

标签: ios class casting

在appDelegate中,我想做一些事情,以防可见的视图控制器是类MyViewController。然后我想检查myVar类中定义的属性MyViewController。这是我的代码:

UIViewController *vc = [self visibleViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
if ([vc isKindOfClass:[MyViewController class]]) {
    if (vc.myVar == "foo") {
         // do something
    }
}

我说错误:Property myVar not found on object type of 'UIViewController *' 我如何告诉代码我现在确定vc是MyViewController类的一种类型?

2 个答案:

答案 0 :(得分:3)

你需要做的是投射

UIViewController *vc = [self visibleViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
if ([vc isKindOfClass:[MyViewController class]]) {
    if ([(MyViewController *)vc myVar] == "foo") {
         // do something
    }
}

答案 1 :(得分:1)

您确定vc是MyViewController对象,但在下一行中,vc仍被视为UIViewController。您可以创建一个MyViewController指针或自动投射它:

UIViewController *vc = [self visibleViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
if ([vc isKindOfClass:[MyViewController class]]) {

    MyViewController * myViewControllerVc = (MyViewController *)vc;

    if (myViewControllerVc.myVar == "foo") {
         // do something
    }
}

UIViewController *vc = [self visibleViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
if ([vc isKindOfClass:[MyViewController class]]) {
    if (((MyViewController *)vc).myVar == "foo") {
         // do something
    }
}

当我不止一次使用自定义类属性时,我倾向于使用第一个解决方案,否则我会使用第二个解决方案。