presentViewController: сбой на iOS <6 (AutoLayout)


92

Я получаю странный сбой. Сбой происходит, когда я нажимаю кнопку, которая переходит к определенному ViewController. Строка, на которой происходит сбой:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

След аварии:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

ПРИМЕЧАНИЕ: это вылетает на моем iPhone 4 iOS 5.1, но не на моем iPhone 4S iOS 6 Beta 2.


2
У меня была такая же проблема после обновления до Xcode 4.5 и приложения на iphone 5.1. Посмотрите на эту ссылку: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Да, я думаю, мы это установили :)
MCKapur

Ответы:


201

Я считаю, что это проблема нового построителя интерфейса Xcode. Вам довелось создать свой .xib с помощью построителя интерфейса Xcode 4.5? Я столкнулся с той же проблемой только сейчас, и я думаю, что проблема в этом. Мое приложение работает на iOS 6, но не на более ранней версии.

И вам нужно убедиться, что вы отключили Use Auto Layoutсвои xibs .

Это можно сделать:

  1. Откройте ваш xib.
  2. Переходим во File Inspectorвкладку.
  3. Найдите Interface Builder Documentраздел на правой панели инструментов.
  4. Снимите отметку с Use Auto Layoutопции.

37
Да, вам нужно убедиться, что вы отключили "использовать автоматический макет" для ваших перьев.
Wevah

Да, такая же проблема. Что с этим делать? Должен ли я тестировать его на Xcode 4.4 (это может быть причиной, по какой-то странной причине мой iPhone 4 iOS 5.1 может работать на Xcode 4.5 ... даже если это не iOS 6)
MCKapur

16
В главном представлении вашего xib, Раздел документа конструктора интерфейсов на правой панели инструментов.
Марк

Для всех, кто интересуется, я создал файл пера в Xcode 4.5 для старого контроллера представления, который программно настраивал его представление. Вскоре я понял, что мое новое перо не будет работать в iOS 5, поэтому я удалил файл пера и начал получать аналогичную ошибку, даже подумав, что нового файла пера больше нет даже в моем проекте! Решением было переименовать файлы .h и .m, тьфу.
Келлер

2
Немного беспокоит то, что сейчас происходит с контролем качества в Apple.
ardochhigh

43

Снимок экрана

У меня была такая же проблема, когда я загрузил новое обновление XCode и IOS6 SDK. Вот как я это решил:

Выберите файл построителя интерфейса (будь то файл xib или файл раскадровки), в котором возникает ошибка. В помощнике редактора справа в XCode выберите первую вкладку слева, и там есть флажок для опции «Использовать авто-раскладку», как на скриншоте выше. Снимите флажок.


4

Нагараджа спрашивает: «Как решить эту же проблему, если мы не используем xib? Я столкнулся именно с этой проблемой. Я создал контроллер с xib, а затем решил удалить файл xib. Сбой не исчез. Проблема была в что мне нужно было реализовать

- (void) loadView

в моем классе контроллера. Как только я реализовал этот метод, проблема была решена.


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.