在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
类的一种类型?
答案 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
}
}
当我不止一次使用自定义类属性时,我倾向于使用第一个解决方案,否则我会使用第二个解决方案。