- viewDidLoad проблема бесконечного цикла ... (iOS) - PullRequest
4 голосов
/ 13 февраля 2011

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

    -(void)viewDidLoad
{   
    // Load up new instance of view
    TopLevelViewController *topLevelController = 
    [[TopLevelViewController alloc] initWithNibName:@"TopLevelView" bundle:nil];

    // Hand off viewController reference to root controller
    self.topLevelViewController = topLevelController;

    // Display the view
    [self.view insertSubview:topLevelController.view atIndex:0];

    // Release viewController
    [topLevelController release];


    [super viewDidLoad];
}

Выше приведен мой rootViewController viewDidLoad: метод, хотя каждый раз, когда он выполняет insertSubview, он, похоже, возвращается наверх и выполняет все заново.Я немного сбит с толку, так как я почти идентично основал этот код на учебнике, которому я следовал, и он прекрасно работал ... что заставляет меня думать, что проблема должна быть в другом месте, хотя я не мог думать где.

Цените любую проницательность!

Ответы [ 8 ]

14 голосов
/ 10 сентября 2011

Я столкнулся с той же проблемой, и мне потребовалось время, чтобы разобраться.

Если self.view не существует, iOS вызовет loadview / viewdidload и попытается создать представление. это вызывает тупик. В моем случае я не вызывал [super loadView] в моем loadView и не вызывал эту проблему.

Смотрите это обсуждение http://forums.macrumors.com/showthread.php?t=552520

5 голосов
/ 13 февраля 2011

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

Также добавьте NSLog(@"%@ self is %p", NSStringFromSelector(_cmd), self); в начало вашего viewDidLoad.Возможно, вы создали некое подобие конфигурации «бесконечных зеркал» для nib-файлов;если шестнадцатеричное число будет меняться, это будет другой пример вашего взгляда.

2 голосов
/ 10 сентября 2011

Я знаю, это звучит просто, но попробуйте двигаться

[super viewDidLoad]

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

1 голос
/ 14 августа 2012

Я удалил метод loadView, и он исправил его для меня, если у вас есть этот метод в вашем .m файле, удалите его !!

1 голос
/ 19 сентября 2011

Просто понял, что я никогда не закрывал это после недавнего интереса.

Насколько я помню, @Wolfgang Schreurs абсолютно прав. По какой-то причине во время экспериментов с кодом у меня было topLevelViewController наследование от rootViewController.

Надеюсь, это поможет любому, кто может столкнуться с той же проблемой.

0 голосов
/ 01 августа 2014

Это происходит также, если вы делаете @property (nonatomic, strong) UIView *loadView и получаете к нему доступ в viewDidLoad Вы должны переименовать имущество.

0 голосов
/ 14 февраля 2011

Установите точку останова и посмотрите, где проходит ваш цикл ...

0 голосов
/ 13 февраля 2011

Попробуйте [self.view addSubview:topLevelController.view]

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