Итак, LoginViewController, который вы создаете здесь, отличается от того, который вы установили в раскадровке. Я думаю, что вы хотите, чтобы тот, который находится в раскадровке, был загружен и представлен.
Самый простой способ - создать переход в раскадровке от вашего первого контроллера представления до контроллера представления входа в систему, который вы там создали. Вы можете с помощью Ctrl перетащить один контроллер вида на другой и выбрать «Модальный» в качестве типа перехода. Затем перейдите к инспектору для этой передачи и дайте ему идентификатор. Допустим, вы называете это "segueToLogin".
Затем, чтобы выполнить этот переход из вашего кода, просто сделайте что-то вроде этого:
if (![prefs stringForKey:@"id"]){
[self performSegueWithIdentifier:@"segueToLogin" sender:self];
}
Надеюсь, это поможет.
EDIT
Итак, просто чтобы ответить на ваш вопрос, представьте себе:
У вас есть отличная идея для приложения, поэтому вы снимаете лист бумаги со своего планшета и делаете набросок этого великолепного дизайна. Потом приходят твои коллеги, поэтому ты срываешь новый чистый лист бумаги и показываешь им это. Они не будут впечатлены.
То же самое произошло здесь. Вы устанавливаете контроллер представления в вашей раскадровке со всеми вашими представлениями. Но когда пришло время показать это, вы вытащили новый полностью пустой контроллер представления и показали это пользователю. Вместо этого, потянув и активировав переход, вы в конечном итоге загрузите нужный экземпляр контроллера вида.
Теперь для сегментов вы создаете их в раскадровке, чтобы позволить пользователю перемещаться по сценам. Иногда эти переходы напрямую связаны с кнопкой или чем-то еще. Но в этом случае вы не хотите просить пользователя нажать кнопку или что-то еще, чтобы представить логин vc, поэтому вы выполняете переход самостоятельно.
Надеюсь, это имеет смысл.