我正在尝试创建一个嵌套的故事板结构,以帮助打破一个巨大的故事板(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,所以这不是问题。
答案 0 :(得分:0)
您在以下行中收到错误的原因:
[self.presentingViewController setViewToLoad:@"StoryOne"];
是因为您正在调用NestedStoryTestViewController
类的方法,但编译器认为它是UIViewController
类。
由于您知道该类是什么,因此您需要将其“转换”(或强制转换)为正确的类型,以便编译器知道它将响应您的方法,如下所示:
[(NestedStoryTestViewController *)self.presentingViewController setViewToLoad:@"StoryOne"];