presentViewController: crash di iOS <6 (AutoLayout)


92

Ini adalah kecelakaan aneh yang saya alami. Kemacetan terjadi ketika saya menekan tombol yang menuju ke ViewController tertentu. Garis yang membuatnya crash adalah:

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

Jejak kerusakannya adalah:

*** 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

CATATAN: Ini macet di iPhone 4 iOS 5.1 saya tetapi tidak di iPhone 4S iOS 6 Beta 2 saya


2
Saya memiliki masalah yang sama setelah meningkatkan ke Xcode 4.5 berjalan dan aplikasi di iphone 5.1 Lihat tautan ini: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Ya, saya pikir kami telah menetapkan itu :)
MCKapur

Jawaban:


201

Saya yakin ini adalah masalah dengan pembuat antarmuka baru Xcode. Apakah Anda kebetulan membangun .xib Anda menggunakan pembuat antarmuka Xcode 4.5? Saya baru saja mengalami masalah yang sama, dan saya pikir itulah masalahnya. Aplikasi saya berjalan di iOS 6, tetapi tidak lebih lama.

Dan Anda perlu memastikan bahwa Anda mematikan Use Auto Layoutxibs Anda .

Itu bisa dilakukan dengan:

  1. Buka xib Anda.
  2. Buka File Inspectortab.
  3. Temukan Interface Builder Documentbagian di toolbar kanan.
  4. Hapus centang Use Auto Layoutopsi.

37
Ya, Anda perlu memastikan Anda menonaktifkan "gunakan tata letak otomatis" untuk ujung pena Anda.
Wevah

Ya, masalah yang sama. Apa yang harus dilakukan tentang hal itu? Haruskah saya mengujinya di Xcode 4.4 (Itu mungkin alasannya, karena beberapa alasan aneh iPhone 4 iOS 5.1 saya dapat berjalan di Xcode 4.5 ... meskipun bukan iOS 6)
MCKapur

16
Di tampilan utama xib Anda, bagian Dokumen pembuat Antarmuka di bilah alat kanan.
Tandai

Bagi siapa pun yang tertarik, saya membuat file nib di Xcode 4.5 untuk pengontrol tampilan lama yang mengatur tampilan secara terprogram. Saya segera menyadari nib baru saya tidak akan berfungsi di iOS 5, jadi saya menghapus file nib, dan mulai mendapatkan kesalahan serupa, bahkan mengira file nib baru tidak lagi ada di proyek saya! Solusinya adalah dengan mengganti nama file .h dan .m, ugh.
Keller

2
Sedikit kekhawatiran tentang apa yang terjadi dengan kendali mutu di Apple belakangan ini.
ardochhigh

43

ScreenShot

Saya memiliki masalah yang sama ketika saya mengunduh pembaruan XCode baru dan SDK IOS6. Inilah cara saya menyelesaikannya:

Pilih file Pembuat antarmuka (apakah file xib atau storyboard) tempat kesalahan terjadi. Di asisten editor di sebelah kanan di XCode, pilih tab pertama dari kiri, dan ada kotak centang untuk opsi "Gunakan Autolayout" seperti pada gambar di atas. Hapus centang pada kotak centang.


4

Nagaraja bertanya "Bagaimana cara mengatasi hal yang sama jika kita tidak menggunakan xib? Saya mengalami masalah ini. Saya membuat pengontrol dengan xib, lalu saya memutuskan untuk menghapus file xib. Kerusakan tidak hilang. Masalahnya adalah yang perlu saya terapkan

- (void) loadView

di kelas pengontrol saya. Setelah saya menerapkan metode ini, masalah terpecahkan.


1

Alasan lain yang mungkin untuk crash dengan presentViewController adalah memiliki sesuatu di ujung pena yang terhubung ke variabel yang sudah tidak ada lagi - variabel entah namanya diubah atau telah dihapus.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.