IOS:无法从presentViewController访问presentationViewController上的属性和方法

时间:2012-03-21 00:02:46

标签: objective-c ios xcode4 storyboard

我正在尝试创建一个嵌套的故事板结构,以帮助打破一个巨大的故事板(SVN合并噩梦)...无论如何,我有一个父故事板/ viewController在这种情况下'NestedStoryTestViewContoller'和另外两个故事板/ ViewControllers(StoryOne和StoryTwo分别)

当您单击NestedStoryTestViewContoller中的按钮时,将StoryOne作为模态视图启动。然后我可以解雇它并返回NestedStoryTestViewController。但是,如果我想直接从StoryOne转到StoryTwo,我会遇到问题。我想做的是:

-(IBAction)goToStoryTwo{

    UIStoryboard *storyTwo = [UIStoryboard storyboardWithName:@"BoardTwo" bundle:nil];
    UIViewController *boardTwoVC = [storyTwo instantiateInitialViewController];
    boardTwoVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.presentingViewController presentModalViewController:boardTwoVC animated:YES];   

}

但这没有任何作用。

我可以用以下内容解除模态视图:

-(IBAction)goToMain{

     [self dismissModalViewControllerAnimated:YES];
 }

我可以在解除模态视图后从NestedStoryTestViewController的viewDidLoad方法调用一个新的ModalView,但为了工作,我需要在NestedStoryTestViewCOntroller上调用某种方法来设置一个属性,告诉它要加载哪个新的模态视图。

当我尝试调用这样的方法时,我得到一个很好的大胖编译器错误,似乎没有理由:

[self.presentingViewController setViewToLoad:@"StoryOne"];

触发错误:自动引用计数问题'接收者类型'UIViewController'例如消息未声明具有选择器'setViewToLoad'的方法

该方法已明确定义和实现,我不知道它为什么会抛出此错误。尝试在'presentsViewController'上设置任何属性时,我得到了同样的错误。如果我输入一个日志声明,如:

NSLog(@"parent class : %@",[[self presentingViewController] class] );

按预期记录'父类:NestedStoryTestViewController'。

非常感谢任何帮助,因为这是为了工作,因此非常重要和及时。如有必要,我可以提供项目文件。

谢谢, 克里斯

请注意:我知道名称从'parentViewController'更改为'presentViewController',项目只是5.0,所以这不是问题。

1 个答案:

答案 0 :(得分:0)

您在以下行中收到错误的原因:

[self.presentingViewController setViewToLoad:@"StoryOne"];

是因为您正在调用NestedStoryTestViewController类的方法,但编译器认为它是UIViewController类。

由于您知道该类是什么,因此您需要将其“转换”(或强制转换)为正确的类型,以便编译器知道它将响应您的方法,如下所示:

[(NestedStoryTestViewController *)self.presentingViewController setViewToLoad:@"StoryOne"];