Предупреждение. Попытайтесь представить, чей вид не находится в иерархии окон! При использовании идентифицированного segue

Я знаю, что в этом есть много других вопросов, но они не полностью объясняют мою проблему.

Я перехожу из своего начального контроллера представления SAGViewController в другой SAGHomeScreenViewController через определенный пользовательский сегмент раскадровки, когда нажата соответствующая кнопка:

-(IBAction)goNewGame{
    [self performSegueWithIdentifier:@"startHomeSegue" sender:self];
}

Он отлично работает, но я все равно получаю предупреждение:

Предупреждение: попытка представить SAGHomeScreenViewController: 0xc43b800 на SAGViewController: 0xbaaa9f0, чей вид не находится в иерархии окон!

Если я прокомментирую performSegueWithIndentifer, segue все еще работает, но я не получаю предупреждение:

-(IBAction)goNewGame{
    //[self performSegueWithIdentifier:@"startHomeSegue" sender:self];
}

Почему? Обратите внимание, что у меня нет контроллера навигации.
Любой совет здесь будет оценен, segue все еще работает, но я не хочу никаких предупреждений, которые я не понимаю!

Ответ 1

Вы должны удалить этот метод, и вы должны установить соединение в своем раскадровке с кнопки на второй viewController.

//EXTENDED

Если вы хотите передать что-то в свое место назначения, вы используете метод prepareForSegue: sender. Этот метод вызывается каждый раз, когда вы меняете представление через segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"YOURSEGUEIDENTIFIER"])
    {
        YourViewController *yourVC = [segue destinationViewController];
    }
}

//EXTENDED

Это происходит потому, что вы связали свой segue двумя способами: один в коде, а другой - в раскадровке. Вы должны удалить один из них. Вы можете удалить свой IBAction из своего кода (так что у вас будет только соединение в раскадровке), или вы можете удалить свое соединение в раскадровке (от вашей кнопки до контроллера точки доступа) и добавить его снова, но на этот раз перетащить его из контроллера исходного вида ( не кнопку) на контроллер точки назначения. Не забудьте установить идентификатор segue. Если вы используете раскадровку, я бы порекомендовал вам удалить ваш IBAction из кода, меньше кода для управления. Надеюсь на эту помощь.