UISplitViewController установка viewControllers во второй раз вылетает - PullRequest
2 голосов
/ 20 марта 2012

Я использую UISplitViewController на ARC.

Я настраиваю контроллер в моем 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

1 Ответ

8 голосов
/ 14 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...