2

Я использую UISplitViewController по адресу ARC.UISplitViewController setting viewControllers во второй раз сбой

Я настраиваю контроллер в своем AppDelegate, а затем сделаю его rootViewController. Я сделал так, чтобы сделать его property:

@property (strong, nonatomic) UISplitViewController *splitViewController; 

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

Вот как я поставил эти:

Screens *edit = [[Screens alloc] initWithStyle:UITableViewStyleGrouped]; 
    UINavigationController *c = [[UINavigationController alloc] initWithRootViewController:edit]; 

    if ([Utility isIpad]) { 
     Map *a = (Map *)[[MyAppDelegate instance].splitViewController.viewControllers objectAtIndex:0]; 
     NSArray *viewControllers = [NSArray arrayWithObjects:a, c, nil]; 
     UISplitViewController *splitView = [MyAppDelegate instance].splitViewController; 
     splitView.viewControllers = viewControllers;// <--- Crashes here 
    } else { 
     [self presentModalViewController:c animated:YES]; 
    }//end 

Почему это сбой при попытке установить viewControllers свойство? Мне кажется, что он выпущен, но я знаю, что splitViewController все еще там ...

Это может быть связано с ARC?

StackTrace:

enter image description here

+0

Какова обратная трассировка при ее сбое? Кроме того, сомневайтесь, что это связано с ARC. – mattjgalloway

+0

Хорошо, тупой вопрос. Как я вижу обратную линию? Я только то, что находится в Debug Navigator. –

+0

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

ответ

8

Я имел ту же ошибку, только сейчас. В моем случае проблема заключалась в том, что я изначально настроил контроллер подробных представлений как делегат UISplitViewController. Затем я реорганизовал, чтобы обработчик корневого представления обрабатывал вещи, но я забыл удалить соединение из файла .xib.

Итак, когда я установил splitView.viewControllers в первый раз, все сработало, но тогда мой оригинальный контроллер детали будет выпущен, а UISplitViewController остался с плохим указателем, как delegate. В следующий раз, когда я установил свойство viewControllers, UISplitViewController попытался вызвать его делегата через указатель и разбился.

Вы пишете, что вы настроили контроллер в своем делете приложения, так что это может быть не совсем та же проблема, что и у вас. Тем не менее, дважды проверьте, правильно ли установлено свойство delegateUISplitViewController!

+0

+1. Из-за этого мое приложение рушилось, и я только что провел последние три часа, пытаясь понять это. Ты спас меня, кто знает, сколько горя! – Julian

+0

Спасибо! Я рад, что смог что-то вернуть - Stack Overflow спас меня от недельной отладки. –

+0

+1 Очистить ответ – amcc

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