【问题标题】:Can't access parentviewcontroller's properties无法访问 parentviewcontroller 的属性
【发布时间】:2013-05-20 12:10:46
【问题描述】:

这是一个快速而肮脏的问题: 我有一个从父 VC 打开的“主”视图控制器 (VC),它使用导航控制器。然后我有一个从“主”VC 打开(模态转场)的“子”VC。

我在 VC 的主界面中设置了一个属性:

@property (nonatomic) int myVar;

然后通过触摸按钮的动作来设置它,以从“主”VC的界面显示“子”VC:

self.myVar=1;

我在 subVC.h 中导入了 mainVC.h

然后在 subVC 的 viewDidLoad 方法中,我试图访问 myVar 的值,但不能这样做:

NSLog(@"Myvar is %i", ((mainVC*)self.parentViewController).myVar);

返回值为 0。

当我尝试呈现ViewController 方法时,我得到一个错误(当我推动segue而不是使其成为模态时,这并没有导致错误:

[MainVC myVar]: 无法识别的选择器发送到实例

我正在尝试为 iOS 5 编写代码,不用说我还是个菜鸟。 我错过了什么?

谢谢!

【问题讨论】:

    标签: ios objective-c properties uiviewcontroller


    【解决方案1】:

    “子”视图控制器的parentViewController不是mainVC,它是导航控制器。 mainVC 不可访问 - 据您所知,它可能会被释放以节省内存。

    如果需要在segue上将数据从主控制器传递到子控制器,在“子”视图控制器中添加一个实例变量,并在prepareForSegue方法中设置:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([[segue identifier] isEqualToString:@"open_sub"]) {
            subVC *sub = segue.destinationViewController;
            sub.myVar = 1;
        }
    }
    

    【讨论】:

    • 感谢这工作。对于像我这样的几乎所有菜鸟来说,请注意:您必须在情节提要视图中将 segue 标识符设置为“open_sub”,并在 mainVC.h 中导入 subVC.h 才能使其正常工作。但是制作 segue modal 也引起了另一个问题,导航栏在 subVC 中不再存在,在 storyboardview 中也看不到,我该如何找回它?
    • @user2292949 尽管您可以在模态转场之后使导航栏可见(请参阅this comment for details),但从应用程序的角度来看,这几乎没有意义。有关何时使用每种类型的 segue 的简要说明,请参阅 this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2016-06-05
    • 2018-04-24
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多