2009-03-11 5 views
0

Кажется, что я удаляю что-то вроде панели вкладок, контроллера навигации или ???, и это происходит, когда я перехожу к определенному виду контроллер, а затем нажмите на панель вкладок на определенную вкладку (например, если я попал на среднюю вкладку из 3 вкладок, никаких проблем, но если я попаду на самую верхнюю вкладку, я получаю сбой). Моя программа в основном завершена, и на данный момент у меня есть довольно большая база кода. У кого-нибудь есть предложения по отладке этого - я ждал до сих пор, чтобы работать над этим. Я считаю, что нужно посмотреть на процедуры dealloc и любые релизы в соседнем коде. Вы можете предложить любую вещь, менее «ручную»? Благодаря!Tab Bar Issue: [UILayoutContainerView hash]: сообщение отправлено на освобожденный экземпляр

ответ

1

Не зная больше, вот как я буду заниматься этим.

  1. В окне просмотра журналов введите backtrace после исключения в gdb. Надеюсь, это даст вам точную строку, которая показывает, какой объект свободен слишком много раз.

  2. Ищите ссылки на этот объект и выясните, можете ли вы найти ненужный выпуск, авторейтинг и т. Д. Путем проверки. Вы не должны выпускать/автообновлять все, что ваш путь выполнения не принадлежит (через alloc).

Возможно, вам удастся распечатать счетчики для этого объекта (отправив сообщение keepCount на объект-нарушитель). Несмотря на то, что документация разработчика настоятельно указывает на то, что это бессмысленно и не очень полезно, я посчитал полезным иногда помогать мне сужаться, когда я случайно что-то освободил.

+0

Решение с использованием вышеприведенной отладки: 1) Используется - (void) viewDidLoad вместо loadView для загружаемого контроллера просмотра nib. 2) Также изменено: UIView * contentView = [self.navigationController view]; self.view = contentView; [релиз contentView]; : self.view = [self.navigationController view]; – Rob

+0

Извините за уродливое форматирование, но сайт предпочитает оставлять комментарий к «уже ответили на вопрос». – Rob

+0

Ваше изменение в пункте 2 имеет смысл. Так как UIView ContentView не был выделен, путь кода не принадлежал. Поэтому сообщение [contentView release] было посторонним. Отличная работа! – hyuan

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