【问题标题】:Objective C Accessing var in Initial View Controller of StoryboardObjective C在Storyboard的初始视图控制器中访问var
【发布时间】:2015-04-22 21:06:47
【问题描述】:

使用:

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。

不确定我对 ViewController 和 Storyboard 有什么不了解,但我非常感谢您的帮助。

谢谢

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

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

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

因此,您必须获取具有正确类型的 View Controller 才能访问 var。但是,如果它没有设置为情节提要中的初始视图控制器,则必须将其作为堆栈上的根(第 0 个)视图控制器。那么你必须记住推送导航控制器而不是视图控制器。

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

【问题讨论】:

    标签: ios objective-c uiviewcontroller storyboard


    【解决方案1】:

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

    MyViewController *vc = [storybord instantiateInitialViewController];
    

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

    【讨论】:

    • 人力资源部。我仍然缺少一些东西: UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil]; InitialViewController *vc = [storybord instantiateInitialViewController]; vc.boolIsTrue = 是;不起作用。那是你的本意吗?
    • 编译错误?哪条线?讯息是什么? InitialViewController.h 有boolIsTrue 属性?
    • 哈!胖手指!它现在可以访问它。但我得到: [UINavigationController setIsBoolTrue:]: unrecognized selector sent to instance 0x127d26730
    • 代码:UIViewController *vc = [[UIStoryboard storyboardWithName:@“MyStoryBoard” bundle:nil] instantiateInitialViewController]; [self presentViewController:vc 动画:YES 完成:^{}]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@“MyStoryBoard” bundle:nil]; InitialLockSetupViewController *vc2 = [storyboard instantiateInitialViewController]; vc2.isBoolTrue = 是; });
    • 好的,所以你的初始视图控制器确实是一个导航控制器,所以应该是UINavigationController *nvc = [storyboard ...]; MyViewController *vc = mvc.topViewController;
    猜你喜欢
    • 2016-02-02
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-10-27
    • 2012-05-12
    • 2013-08-29
    相关资源
    最近更新 更多