Вы все как-то усложнили. Storyboard имеют встроенный механизм переходов между контроллерами, насколько он идеален - отдельная тема для холиваров, но тем не менее
Вам нужно сделать следующее:
1) Создать переход между контралами. Это делается простым перетягиванием
2) Выбрать этот переход и задать ему идентификатор (любую строку)
3) в обработчике нажатия кнопки вызвать нужный Вам переход
- (void)someMethod {
[self performSegueWithIdentifier:@"loginMainSegue" sender:self];
}
Подробней как это сделать, можно тут посмотреть
stackoverflow.com/questions/9248798/perform-segue-...
Чем плох тот вариант, который Вы используете:
Вы грузите viewcontroller ручками со сторибоарда, потом презентуете его в текущем (а что будет если у Вас там где-то выше по иерархии navigationController, или другой контейнер и Вам нужно pushViewController). Ну и самое главное преимущество: простота и наглядность. Открыл storyboard и увидел откуда и куда можно попасть