2014-02-21 3 views
0

Я имею дело с проблемой segue, и это становится нелепо.Segue не работает визуально

я выступаю как это, как я всегда делаю в контроллере представления имени LoginViewController:

- (void)loginSuccessfullyAccomplished 
{ 
    [self performSegueWithIdentifier:@"switchToHome" sender:self]; 
} 

выше метод вызывается из другого класса, где некоторые другие подписи в действиях выполняются асинхронно, и когда его делается, он вызывает этот метод из LoginViewController.m:

// Some Code 
. 
. 
. 
. 
case VIDYO_CLIENT_OUT_EVENT_SIGNED_IN: 
{ 
    /*** Notifying upper layer (Login View Controller) from signing in ***/ 
    UIStoryboard *storyboard; 
    if (IDIOM == IPAD) 
    { 
     storyboard = [UIStoryboard storyboardWithName:@"MasterStoryboard-iPad" bundle:nil]; 
    } 
    else if (IDIOM == IPHONE) 
    { 
     storyboard = [UIStoryboard storyboardWithName:@"MasterStoryboard-iPhone" bundle:nil]; 
    } 
    UINavigationController *nav = [storyboard instantiateInitialViewController] ; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [nav.viewControllers[0] loginSuccessfullyAccomplished]; 
    }); 
    break; 
} 
. 
. 
. 
. 
//Rest of the code 

Теперь, вот проблема:

loginSuccessfullyAccomplished вызывается успешно (используемые контрольные точки, чтобы убедиться в этом), но я не вижу, чтобы второй контроллер отображения отображался на экране.

У меня нет ошибок и исключений, если выполнено performSegue, это означает, что я не ошибаюсь в отношении идентификатора сегмента или контроллера первого вида, из которого выполняется segue.

Я также уверен, что использую push-сегу, и я включил свои контроллеры представлений в навигационном контроллере.

Просто, чтобы убедиться, что я не делаю ничего плохого с самим сегментом, я применил метод prepareForSegue, и он называется. Я также проверил, что он указывает исправить назначение:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.destinationViewController isKindOfClass:[UserHomeViewController class]]) 
    { 
     NSLog(@"YES"); 
    } 
} 

Второй контроллер вид визуально не похож на первый контроллер представления, так что я определенно заметит, если она меняется.

Я понятия не имею, что происходит не так. Любые предложения действительно оценены.

Спасибо.

P.S: Я знаю, что есть десятки «performSegueWithIdentifier не называемых» вопросов, но ни один из них не помог моему делу !!!

+0

С другой стороны, я думаю, что я ошибаюсь в выборе экземпляра 'LoginViewController', на котором я вызываю метод! –

+0

Почему вы начинаете новую раскадровку? – duci9y

+0

Да. Вот оно @ Unkn0wn.Bit. Я бы отправился с объявлением в мир через NSNotificationCenter. Вот очень проголосовавший пример http://stackoverflow.com/questions/2191594/send-and-receive-messages-through-nsnotificationcenter-in-objective-c – danh

ответ

2

Метод называется успешно, но на каком экземпляре? Код в блоке IDIOM == IPHONE очень подозрительный. Он вызывает loginSuccessfullyAccomplished на совершенно новом экземпляре, который не был представлен, поэтому не удивительно, что мы не увидели бы никаких изменений в пользовательском интерфейсе.

Что мне нужно в объекте, где выполняется логика входа, является ссылкой на экземпляр LoginViewController, который фактически был представлен. Вы можете сделать это, сделав его делегатом. Может быть, лучше, не утруждайтесь указателями .... у логической логики стоит NSNotification, что логин завершился, и отметьте LoginViewController и отпустите его.

+0

Да, я понял, что всего за секунду до того, как я увижу ваш сообщение: D Thanks –

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