2013-02-11 55 views
2

当我尝试访问我的parentViewController中的方法时,我的应用程序崩溃。以下是在故事板iOS访问parentViewController中的属性

enter image description here

MainViewController = STLMMainViewController(ParentViewController)

场景1 = STLMTimeDateViewController(ChildViewController)

这里布局被用于STLMTimeDateViewController

代码
#import "STLMTimeDateViewController.h" 
#import "STLMMainViewController.h" 

@interface STLMTimeDateViewController() 
@property (nonatomic, strong) STLMMainViewController *stlmMainViewController; 
@end 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"The name of the controller %@",self.navigationController.parentViewController); 

    stlmMainViewController= (STLMMainViewController *) self.parentViewController; 
    [stlmMainViewController locationButtonSelected]; // This is where the App crashes 
    NSLog(@"TimeDateController"); 
} 

该应用运行,但是当调用STLMMainViewController时,该应用程序并出现以下错误崩溃:

2013-02-10 16:33:57.422 MyApp[9120:c07] The name of the controller <STLMMainViewController: 0x83850d0> 
2013-02-10 16:33:57.434 MyApp[9120:c07] -[UINavigationController locationButtonSelected]: unrecognized selector sent to instance 0x8371a70 

如果我删除以下行:

stlmMainViewController = (STLMMainViewController *) self.parentViewController; 

和刚刚离开

[stlmMainViewController locationButtonSelected]; 

应用程序运行,没有错误,但在下面的方法[ STLMMainViewController locationButtonSelected]没有被调用(我从来没有看到日志):

-(void)locationButtonSelected 
{ 
    [LocationButton setSelected:YES]; 
    [eatDrinkbutton setSelected:NO]; 
    [timeCalButton setSelected:NO]; 
    [carButton setSelected:NO]; 
    [contactButton setSelected:NO]; 
    NSLog(@"LocationButtonSelected Method"); 
} 

locationButtonSelected方法和方法本身中的所有属性都在STLMMainViewController的.h中声明以供公共访问。

感谢

+1

类参考苹果开发者网站说,这对parentViewController ... 如果收件人是一个容器视图控制器的一个孩子,这个属性保存它包含在视图控制器。如果收件人没有父,该属性中的值为零。 在iOS 5.0之前,如果视图没有父视图控制器并且正在呈现,则会返回呈现视图控制器。在iOS 5上,此行为不再发生。相反,使用presentsViewController属性来访问呈现视图控制器。 也许试试呈现ViewController – chuthan20 2013-02-11 01:13:19

回答

3

你可以试试这个:

self.stlmMainViewController= (STLMMainViewController *)self.navigationController.parentViewController; 

(编辑:实际上,由于刚才有人指出,你可能想使用presentingViewController代替)

它看起来像你在此之前,在日志消息中正确使用了它。在这种情况下,您需要您的导航控制器的父项。

顺便说一句,你不会崩溃,当你删除这条线的原因,是因为你最终发送locationButtonSelected为零。这不会崩溃,但它也不会做任何事情。为的UIViewController

+0

精美的工作!感谢您的代码和解释@Firoze Bhai。 – user1107173 2013-02-11 01:14:54

+0

我很高兴它解决了。 – 2013-02-11 01:15:31