executeSelector выдает исключение UIViewControllerHierarchyInconsistency - PullRequest
2 голосов
/ 13 октября 2011

Я разрабатывал свое приложение на XCode 4.1 для iOs 4.3, но вчера я обновил его до XCode 4.2 с iOs 5.0 SDK.

Когда я запускаю свое приложение в симуляторе iphone 4.3, оно прекрасно работает,Я решил протестировать его на симуляторе iphone 5.0, и появились следующие проблемы:

  • У меня есть контроллер представления, например, "MyViewController", и пользовательский класс, который реализует некоторый пользовательский компонент "MyCustomComponent", которыйдобавлен в "MyViewController".В MyCustomComponent есть кнопка, и при ее прикосновении она вызывает peformSelector из MyViewController, и это приводит к аварийному завершению работы с чем-то EXC_BAD.Тот же код работает на симуляторе iPhone 4.3 просто отлично.Есть идеи?
  • Пользовательская панель навигации - не работает вообще.Я пытаюсь установить пользовательский фон, реализующий UINavigationBar и переопределяющий drawRect, но он не отображается в ios 5.

Ответы [ 3 ]

6 голосов
/ 15 октября 2011

ОК, так что, думаю, я понял это.Когда я переустанавливал xcode, моя консоль была выключена, поэтому я не видел сообщений об ошибках.Включил его сейчас и получил ошибку

Завершение приложения из-за необработанного исключения 'UIViewControllerHierarchyInconsistency'

Проблема заключалась в том, что я добавлял MyCustomComponent в MyViewController с использованием

self.view=myCustomComponent.view

когда я должен был делать

[self.view addSubview:myCustomCoponent.view]

, это не было проблемой в ios 4.3, но, кажется, это большая проблема в ios 5.

0 голосов
/ 17 октября 2011

Я боролся с той же проблемой.

Когда вы создаете новое приложение Master-Detail (без раскадровки), вы можете увидеть эти коды ниже из AppDelegate.m.

 MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

«НЕ ЗАВИСИТЕ ОТ МЕНЮ» Просто начните с вашего собственного ViewController и установите его на делегирование. И не забудьте отсоединить представление от MainWindow.xib, иначе оно будет вызвано 2 раза.

0 голосов
/ 13 октября 2011

EXC_BAD_ACCESS подразумевает, что объект не существует. Попробуйте NSLog-ging объект, для которого вы выполняете метод executeSelector.

РЕДАКТИРОВАТЬ: если происходит сбой при попытке войти в систему, он был отменен. Проверьте, правильно ли вы удерживаете объект!

Если это действительный объект, попробуйте:

if(![obj respondsToSelector:@selector(mySelector:)]){NSLog(@"no such method!");}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...