Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Window hierarchy, Ошибка "Attempt to present...." 
:(
    Опции темы
Dimanoss
  Дата 22.8.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Попытался воткнуть в проект ViewController.  Нужно было сделать его первым (в нём загрузка переменных и прочие глобальные нужности происходят), переписал файлы AppDelegate.  Сам контроллер работает, но отказывается загружать следующий (который до того был дефолтным и вполне себе прекрасно работал).  Выдаёт сообщение "Warning: Attempt to present <старый_VC: 0x7160b40>  on <новый_VC: 0x715f250> whose view is not in the window hierarchy!".  

Что за нелепость?
PM MAIL   Вверх
Maksys
Дата 22.8.2013, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург

Репутация: нет
Всего: 17



Написано же по русски: "Не могу показать <старый_VC: 0x7160b40> в <новый_VC: 0x715f250> так как его вью не присутствует в иерархии окон"

попробуйте вот это:
Код

[<новый_VC: 0x715f250>.addChildViewController:<старый_VC: 0x7160b40>];
[<новый_VC: 0x715f250>.view addSubView:<старый_VC: 0x7160b40>.view];



--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
Bitter
Дата 22.8.2013, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Если б еще понять как вы все это делаете. А то пока вообще ничего не ясно

Добавлено через 3 минуты и 55 секунд
Цитата(Maksys @  22.8.2013,  11:28 Найти цитируемый пост)
попробуйте вот это:код C++1:2:[<новый_VC: 0x715f250>.addChildViewController:<старый_VC: 0x7160b40>];[<новый_VC: 0x715f250>.view addSubView:<старый_VC: 0x7160b40>.view];

глупости, нужно починить иерархию а не вставлять костыли
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 22.8.2013, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Дык, написано-то оно написано, но ведь до того присутствовал.  Я тоже за починку иерархии.  Но вот как это устроить?  
PM MAIL   Вверх
Bitter
Дата 22.8.2013, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Чтоб это устроить нужно сначала понять что вы там делаете
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 22.8.2013, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



просто меняю контроллер.  
Код

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
  //  [self syncUsers];
    
    SV_LoginViewController *lc = [[SV_LoginViewController alloc] initWithNibName:nil bundle:nil];
    
    lc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:lc animated:YES completion:nil];
}

всё затыкается на последней строчке...
PM MAIL   Вверх
Bitter
Дата 22.8.2013, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Приведенный код рабочий, так что все должно работать. Если не работает - значит не там смотрите
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 22.8.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



в том-то и фокус.  С другими контроллерами это работало.  А тут всё встряло...

Добавлено через 7 минут и 5 секунд
О!  Если я тот же самый код вешаю на кнопку, то всё работает!  А в viewDidLoad не работает!....  smile 
PM MAIL   Вверх
Dimanoss
  Дата 29.8.2013, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



по тому же вопросу.  При вызове из ViewDidLoad вылетает ошибка, при вызове из функции обработки нажатия кнопки всё океюшки.  Такая думка - не успевает вызываемый контроллер "прописаться".  Если это так, то как-то можно задержку выполнения организовать (дождаться полной загрузки).  Либо так: может, зря я это в ViewDidLoad вызываю, может есть другая функция, которая запустится по полной загрузке контроллера?
PM MAIL   Вверх
Bitter
Дата 29.8.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



да, методов предостаточно. Есть методы viewWillAppear и viewDidAppear, вызываются перед отображением вью и после этого. Но учтите что они будут вызываться каждый раз перед и после отображения вьюхи.
Можно сделать такой фокус - во вьюДидЛоад написать
Код

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^(void){
        SV_LoginViewController *lc = [[SV_LoginViewController alloc] initWithNibName:nil bundle:nil];
        lc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:lc animated:YES completion:nil];
    });


Это позволит вызвать ваш контроллер спустя 0 секунд, но за то после того как контроллер полностью загрузится
PM MAIL ICQ Skype   Вверх
Dimanoss
  Дата 29.8.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



YYYEEEAAHH!  Спасибище огроменное!  Работает!  smile  smile

Добавлено через 4 минуты и 52 секунды
В логи, правда выдаёт "Unbalanced calls to begin/end appearance transitions for <ViewController>", но мне пока это даже неинтересно.  Главное - работает. 
PM MAIL   Вверх
Maksys
Дата 29.8.2013, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург

Репутация: нет
Всего: 17



Может лучше заюзать viewWillAppear, а там поставить флаг типа isAppear и проверять его

Код

-(void)viewWillAppear{
    if(!isAppear){
        //Logic
        isAppear = YES;
    }
}


Ну это мое нубское решение таких вопросов. Пока не изучал глубже как правильней выйти из этой ситуации.


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
Bitter
Дата 29.8.2013, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Эта ошибка означает что началась анимация перехода ViewController до того как закончилась анимация предыдущего контроллера. Попробуйте перенести этот код в viewWillAppear. только диспатч уберите
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.