Не удается уволить модальный контроллер вида - PullRequest
0 голосов
/ 27 ноября 2011

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

[self dismissModalViewControllerAnimated:YES] из класса LoginViewController, это прекрасно работает, но если я вызываю

[[mainController modalViewController] dismissModalViewControllerAnimated:YES] из моего класса datamanager после того, как я успешно импортировал данные, ничего не происходит.Что крайне запутанно, потому что [mainController modalViewController] указывает на класс locationManager.

У кого-нибудь есть идеи, почему это не работает?Я программирую для iOS 4, если это имеет значение.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

ОК. Итак, я понял это.По сути, происходило то, что вызов [self dismissModalViewController] происходил в другом потоке, что по какой-либо причине означает, что объект неправильно обработал сообщение dismiss.Я закончил тем, что использовал уведомление, а затем вызвал контроллер dismissModalView так:

- (void)dismissSelf
{
    [self dismissModalViewControllerAnimated:YES];    
}

- (void)receiveDismissNotification:(NSNotification *) note
{
    [self performSelectorOnMainThread:@selector(dismissSelf) withObject:nil waitUntilDone:NO];
}

, который работает

3 голосов
/ 27 ноября 2011

Правильный способ отклонить модальный контроллер представления должен вызвать -dismissModalViewControllerAnimated: на контроллере представления, который представил это. Таким образом, это должно быть [_splitViewController dismissModalViewControllerAnimated:YES];.

Из вашего комментария вам нужно вызвать -dismissModalViewControllerAnimated: в главном потоке, вы можете сделать это так:

dispatch_async(dispatch_get_main_queue(), ^{
    [_splitViewController dismissModalViewControllerAnimated:YES];
});
1 голос
/ 28 ноября 2011

Чтобы закрыть контроллер модели, используйте следующий код

[self dismissModalViewControllerAnimated:YES];

Этот код также работает с ios 5.

Для представления модели контроллера вида

if (self.viewController!=nil)
{
       //sanity check for view controller
       [self.viewController SOMEVIEW animated:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...