正在访问parentViewController中的属性的iOS

正在访问parentViewController中的属性的iOS,ios,properties,parentviewcontroller,childviewcontroller,Ios,Properties,Parentviewcontroller,Childviewcontroller,尝试访问我的parentViewController中的方法时,我的应用程序崩溃。这是故事板中的布局 MainViewController=STLMainViewController(父视图控制器) Scene1=STLMTimeDateViewController(ChildViewController) 以下是STLMTimeDateViewController的代码 #import "STLMTimeDateViewController.h" #import "STLMMainViewC

尝试访问我的parentViewController中的方法时,我的应用程序崩溃。这是故事板中的布局

MainViewController=STLMainViewController(父视图控制器)

Scene1=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");
}
应用程序正在运行,但调用stlmainviewcontroller时,应用程序崩溃,出现以下错误:

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 locationButtonSelected];
应用程序正在运行,没有错误,但[STLMAIVIEWCONTROLLER locationButtonSelected]中的以下方法未被调用(我从未看到日志):

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

谢谢你可以试试这个:

self.stlmMainViewController= (STLMMainViewController *)self.navigationController.parentViewController;
(编辑:事实上,正如其他人所指出的,您可能希望改用presentingViewController。)

看起来你在这之前的日志消息中就有它。在这种情况下,您需要导航控制器的父控制器


顺便说一句,删除此行时不会崩溃的原因是您最终将
locationButtonSelected
发送到nil。这不会崩溃,但也不会起任何作用。

苹果开发者网站上UIViewController的类参考对parentViewController来说是这样的。。。如果收件人是容器视图控制器的子级,则此属性将保存它所包含的视图控制器。如果收件人没有父对象,则此属性中的值为零。在iOS 5.0之前,如果视图没有父视图控制器并且正在呈现,则将返回呈现视图控制器。在iOS 5上,这种行为不再发生。相反,请使用presentingViewController属性访问演示视图控制器。也许可以尝试使用运行良好的PresentingViewController!感谢您的代码和解释@Firoze Bhai。
-(void)locationButtonSelected
{
    [LocationButton setSelected:YES];
    [eatDrinkbutton setSelected:NO];
    [timeCalButton setSelected:NO];
    [carButton setSelected:NO];
    [contactButton setSelected:NO];
    NSLog(@"LocationButtonSelected Method");
}
self.stlmMainViewController= (STLMMainViewController *)self.navigationController.parentViewController;