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, розділ Документ конструктора інтерфейсів на правій панелі інструментів.
Марк

Для всіх, хто цікавиться, я створив файл nib в Xcode 4.5 для старого контролера перегляду, який програмував його подання програмно. Незабаром я зрозумів, що мій новий перо не працює в iOS 5, тому я видалив файл nib і почав отримувати подібну помилку, навіть думаючи, що новий файл nib вже відсутній у моєму проекті! Рішенням було перейменувати файли .h та .m, тьфу.
Keller

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.