2015-05-27 3 views
-2

У меня есть два ViewControllers. Назовем их no1 и no2. В no2 у меня есть PopoverViewController с некоторыми опциями и экземпляром NSTimer. Функция таймера вызывает popToViewController через 3 секунды после того, как всплывающее окно отображается, если ничего не щелкнуло в popover, которое возвращает пользователя к no1 ViewController. Проблема в том, когда эта функция активирована, экран изменяется на no1, но приложение выходит из строя без сообщения об ошибке ниже., вызывающий увольнениеПопулярностьОбращаемая в представленииWillDisappear сбой приложения

PopoverViewController не делегат и он зарегистрирован как собственность второго ВК как:

@property (nonatomic)UIPopoverController *optionsPopover; 

Кто-нибудь есть какие-либо идеи, почему нет никакого отчета аварии доступны? И если нет ссылки на popover, почему он рушится?

Реализация в viewWillDisappear выглядит следующим образом:

if([_optionsPopover isPopoverVisible]){ 
    [_optionsPopover dismissPopoverAnimated:NO]; 
    _optionsPopover = nil; 
} 

Я попытался принуждая интерфейс для обновления на главном потоке (ниже кода), но результат тот же. Сбой все еще существует.

dispatch_async(dispatch_get_main_queue(), ^{ 
    if([_optionsPopover isPopoverVisible]){ 
     [_optionsPopover dismissPopoverAnimated:NO]; 
     _optionsPopover = nil; 
    } 
}); 

ответ

1

Пожалуйста, попробуйте сделать сильную ссылку на UIPopoverController

@property (nonatomic,retain)UIPopoverController *optionsPopover; 

вызова ниже метода в - (пустоте) viewDidDisappear: (BOOL) анимированный вместо viewwilldisappear -

- (void)viewDidDisappear:(BOOL)animated { 
if([_optionsPopover isPopoverVisible]){ 
    [_optionsPopover dismissPopoverAnimated:NO]; 
    _optionsPopover = nil; 
} 
} 
+0

Я сделал это, но ошибка все еще присутствует, и информация о сбое не существует. – AleksandarNS

+0

Можете ли вы, пожалуйста, показать мне сообщение об ошибке аварии –

+0

У меня его нет. Это главный вопрос. Приложение аварийно завершает работу и отображает только выделенную зеленую линию в основном классе. – AleksandarNS

0

Вы настраиваете _optionsPopover до нуля после увольнения.

Edit

Возможная проблема: Таймер не признан недействительным после ViewController уволен,

if([_optionsPopover isPopoverVisible]) 
{ 
    [yourTime invalidate]; // added on edit 
    [_optionsPopover dismissPopoverAnimated:NO]; 
} 

Try: одна [_optionsPopover dismissPopoverAnimated:NO];, потому что отклоняя это в основном делает это ноль ..

+0

Как вы можете называть что-то из объекта, если вы ранее задавали ссылку на объект, который должен быть nil? Делая это, вы вызываете функцию с ссылкой на нулевой указатель. – AleksandarNS

+0

вы прокомментировали прямо перед тем, как закончить редактирование, извините за это. – 0yeoj

+0

Я пробовал это, но ошибка присутствует. Приложение аварийно завершает работу без информации о сбое. У меня NSZombie добавлен в проект. – AleksandarNS

0

Установите свойство, как сильный:

@property (strong, nonatomic) UIPopoverController *_optionsPopover; 

Удалить эту строку кода:

_optionsPopover = nil; 
+0

Я сделал это, но ошибка по-прежнему присутствует, и информация о сбое не существует. – AleksandarNS

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