Вы пытаетесь назначить новые ModelViewController
для maleModelViewController
и femaleModelViewController
? Если это так, то вы поступаете неправильно.
Честно говоря, я бы полностью избавился от метода loadModelViewControllerWithModelType:modelView:
. Все, что вам нужно сделать в viewDidLoad
, это:
maleModelViewController = [[ModelViewController alloc] initWithNibName:@"MaleModel"];
femaleModelViewController = [[ModelViewController alloc] initWithNibName:@"FemaleModel"];
(Предполагается, что maleModelViewController
и femaleModelViewController
являются переменными экземпляра, поддерживающими свойства одного и того же имени.)
Когда вы передаете maleModelViewController
и femaleModelViewController
, вы не передаете ссылку на эти переменные, вы передаете их значения. Так как они не были инициализированы, все, что вы делаете, передаете nil
. Чтобы сделать то, что вы пытаетесь сделать, вам нужно передать переменные указатель (т.е. объявить параметр как ModelViewController **
, передать его как &maleModelViewController
и &femaleModelViewController
и назначить он использует *modelViewController = viewController
. Если вы привыкли использовать дружественные для передачи по ссылке языки, такие как C # или Java, вам следует прочитать о том, как это работает в C. .
ОДНАКО, это все еще полное излишество для того, что вы пытаетесь сделать здесь.
Кроме того, ваш код все равно не будет работать, потому что вы поворачиваетесь и отпускаете viewController
. Это может привести к немедленному освобождению его, поскольку единственное упоминание о нем пришло от вас, когда вы alloc
его редактировали. Вы будете назначать мертвую ссылку, которая приведет к сбою вашей программы, как только вы попытаетесь ее использовать.