2

Мое приложение разбивается при попытке доступа к методу в моем родительском контролере. Здесь расположение в StoryBoardiOS Доступ к собственности в 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 метод и сам метод объявлены в .h из STLMMainViewController для общего доступа.

Благодаря

+1

Ссылка на класс для UIViewController на сайтах разработчиков Apple говорит это для parentViewController ... Если получатель является дочерним элементом контроллера представления контейнера, это свойство содержит контроллер представления, в котором он содержится. Если у получателя нет родителя, значение в этом свойстве равно нулю. До IOS 5.0, если в представлении не было родительского контроллера представления, и он был представлен, контроллер представления будет возвращен. На iOS 5 этого поведения больше не происходит. Вместо этого используйте свойство presentingViewController для доступа к контроллеру представления представления. Может быть, попробуйте представитьViewController – chuthan20

ответ

3

Вы можете попробовать это:

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

(EDIT:. На самом деле, а кто-то просто отметили, вы можете захотеть использовать presentingViewController вместо)

Это выглядит, как вы правильно ли это было в сообщении журнала прямо перед этим. В этом случае вам нужен родитель вашего навигационного контроллера.

Кстати, причина, по которой вы не сработали, когда вы удаляете эту строку, заключается в том, что вы в конечном итоге отправляете locationButtonSelected в ноль. Это не потерпит крах, но это тоже ничего не поделает.

+0

Это сработало красиво! Благодарим вас за код и объяснение @Firoze Bhai. – user1107173

+0

Я рад, что все получилось. –

Смежные вопросы