Objective C 在故事板的初始视图控制器中访问 var

Objective C Accessing var in Initial View Controller of Storyboard

使用:

UIViewController *vc = [[UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil] instantiateInitialViewController];

[self presentViewController:vc animated:YES completion:^{}];

但我需要在该故事板的初始 viewController 中设置一个 BOOL。

我在 .h 中声明了 BOOL,并且 if 语句依赖于它:

if (_boolIsTrue) {
    FirstView *firstView = (FirstView *)[storyboard instantiateViewControllerWithIdentifier:@"first_view"];
    [self.navigationController setViewControllers:@[firstView] animated:NO];
}
else {
    SecondView *secondView = (SecondView *)[storyboard instantiateViewControllerWithIdentifier:@"second_view"];
    [self.navigationController setViewControllers:@[secondView] animated:NO];
}

当我尝试使用类似以下内容访问它时:

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];

vc 不允许我访问 BOOL。

不确定我不了解 ViewControllers 和 Storyboards 的原因是什么,但我非常感谢您的帮助。

谢谢

解决方案后编辑: 韦恩完全正确!

这是确切的工作代码,因为我的差距跨越了几个不同的概念。如果它对其他人有帮助:

UINavigationController *nav = [[UIStoryboard storyboardWithName:@“MyStoryBoard” bundle:nil] instantiateInitialViewController];
InitialLockSetupViewController *vc = nav.viewControllers.lastObject;
vc.isBoolTrue = YES;
[self presentViewController:nav animated:YES completion:^{}];

因此您必须获得具有正确类型的视图控制器才能访问 var。但是如果它没有被设置为故事板中的初始视图控制器,你必须将它作为堆栈上的根(第 0 个)视图控制器。那么你必须记住按下导航控制器而不是视图控制器。

再次感谢韦恩。这是一个很好的教训!

您根本不明白编译器需要知道 class 类型。目前你告诉编译器 class 是 UIViewController 并且它显然没有你的自定义 属性。您需要将 class 设置为自定义的,例如:

MyViewController *vc = [storybord instantiateInitialViewController];

此外,请确保您不要多次调用 instantiateInitialViewController,否则您将拥有相同 class 的多个副本,并且可能会使用错误的副本...