libc ++ abi.dylib: terminating dengan pengecualian NSException (lldb) tanpa pengecualian

186

Saya memprogram aplikasi dengan cepat dan ketika saya menjalankan aplikasi uji pada simulator iPhone semuanya berfungsi, tetapi kemudian saya mencoba menggesek ke kanan, yang merupakan isyarat yang saya tambahkan untuk menuju ke Halaman berikutnya (Lihat Pengontrol Dua) crash dan menunjukkan laporan kesalahan ini di log konsol.

2014-10-18 12:07:34.400 soundtest[17081:818922] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<soundtest.ViewControllerTwo 0x7f92f1f20090> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key sfdfa.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001067813f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001082afbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000106781039 -[NSException raise] + 9
    3   Foundation                          0x0000000106b984d3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x00000001066cb400 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x00000001072ce97d -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x000000010712f698 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x000000010712fc88 -[UIViewController loadView] + 109
    8   UIKit                               0x000000010712fef9 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010713038e -[UIViewController view] + 27
    10  UIKit                               0x00000001076cd83f -[_UIFullscreenPresentationController _setPresentedViewController:] + 65
    11  UIKit                               0x000000010710bc49 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 105
    12  UIKit                               0x000000010713c121 -[UIViewController _presentViewController:withAnimationController:completion:] + 1746
    13  UIKit                               0x000000010713e461 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 132
    14  UIKit                               0x000000010713e385 -[UIViewController presentViewController:animated:completion:] + 229
    15  UIKit                               0x00000001073bb9d6 _UIGestureRecognizerSendActions + 262
    16  UIKit                               0x00000001073ba679 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 532
    17  UIKit                               0x00000001073bf296 ___UIGestureRecognizerUpdate_block_invoke662 + 51
    18  UIKit                               0x00000001073bf192 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 254
    19  UIKit                               0x00000001073b520d _UIGestureRecognizerUpdate + 2796
    20  UIKit                               0x00000001070520a6 -[UIWindow _sendGesturesForEvent:] + 1041
    21  UIKit                               0x0000000107052cd3 -[UIWindow sendEvent:] + 667
    22  UIKit                               0x000000010701fae1 -[UIApplication sendEvent:] + 246
    23  UIKit                               0x000000010702cbad _UIApplicationHandleEventFromQueueEvent + 17370
    24  UIKit                               0x0000000107008233 _UIApplicationHandleEventQueue + 1961
    25  CoreFoundation                      0x00000001066b6ad1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    26  CoreFoundation                      0x00000001066ac99d __CFRunLoopDoSources0 + 269
    27  CoreFoundation                      0x00000001066abfd4 __CFRunLoopRun + 868
    28  CoreFoundation                      0x00000001066aba06 CFRunLoopRunSpecific + 470
    29  GraphicsServices                    0x000000010a1699f0 GSEventRunModal + 161
    30  UIKit                               0x000000010700b550 UIApplicationMain + 1282
    31  soundtest                           0x000000010624503e top_level_code + 78
    32  soundtest                           0x000000010624507a main + 42
    33  libdyld.dylib                       0x000000010ae4a145 start + 1
    34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
Nick
sumber
8
Kemungkinan besar Anda telah menghubungkan sesuatu dalam NIB yang tidak ada lagi. Sepertinya crash adalah saat tampilan yang Anda coba transisi menjadi dimuat. Saya akan memeriksa semua outlet di panel inspektur (di sebelah kanan) dan memastikan mereka ada? Ini juga bisa terjadi jika Anda telah memasang tombol ke IBAction yang tidak ada lagi (atau telah diubah namanya)
cmyr
Tidak ada yang tidak digunakan dan masih memberi saya kesalahan.
Nick
Jika Anda menggunakan Xcode 8 dengan mode legacy Swift 2.3 maka lihat jawaban ini: stackoverflow.com/a/39548326/5175709
Honey
6
Secara umum, selalu pergi ke konsol, tekan cmmd + Fsehingga Anda dapat mencari di dalam konsol dan mencari aplikasi Pengakhiran karena pengecualian tanpa tertangkap , tepat 1 baris setelah itu Anda akan melihat alasan: yang memberi tahu Anda alasan aplikasi Anda mogok. (Ya saya sudah terlalu sering mengalami kesalahan ini :)
Honey
1
Bisa juga bermanfaat untuk membuat Exception Breakpoint di Debug-> Breakpoints. Debugger kemudian diharapkan berhenti pada baris kode di mana masalahnya berada.
Chuck Boris

Jawaban:

394

CMYR - "nya juga bisa terjadi jika Anda telah memasang tombol ke IBAction yang tidak ada lagi (atau telah diganti nama)"

Jika Anda mengalami masalah ini pastikan Anda masuk ke Main.storyboard, KANAN klik ikon kotak kuning (view controller) di bagian atas garis besar telepon dan HAPUS stopkontak dengan bendera kuning.

Apa yang terjadi dalam kasus seperti ini adalah Anda mungkin bernama tindakan, lalu ganti namanya. Anda harus menghapus nama lama dan jika itu satu-satunya masalah akan mulai di sim!

masukkan deskripsi gambar di sini

Jebakan
sumber
9
Jawaban yang bagus, terima kasih! Ini adalah cacat SERIUS dengan XCode. Penanganan kesalahan membutuhkan banyak pengembangan.
HyperionX
3
Saya juga memiliki masalah dengan segitiga kuning, tetapi hanya memperbaiki segitiga itu tidak memecahkan masalah bagi saya. :(
Andrej
Ini terjadi pada saya setelah mengganti nama @IBOutlet
Mohammed Fadhl
Haruskah periksa ulang apakah papan cerita termasuk dalam Target atau tidak
hoangtuanfithou
Cukup tinjau outlet dan referensi tindakan di Connections Inspector di storyboard
Álvaro Agüero
95

Apakah Anda menetapkan variabel OS_ACTIVITY_MODE secara kebetulan? Untuk memeriksa apakah Anda memiliki set variabel ini (dan mematikannya), dalam Xcode 9, lakukan hal berikut:

Select from Xcode menu Product -> Scheme -> Edit Scheme.. Select the Run scheme and look under Arguments. If you see the OS_ACTIVITY_MODE variable checked, deselect it

Siddhesh Mahadeshwar
sumber
1
Terima kasih! Saya tidak melihat alasan tabrakan karena itu: "pemilih yang tidak dikenal dikirim ke kelas"
Denis Kutlubaev
14
Astaga, Apple. Bug OS yang belum diperbaiki memaksa kita untuk mengaktifkannya, dan kemudian kita kehilangan pesan debug penting yang sebenarnya. Tangkapan yang bagus, Siddhesh.
Nate
Terima kasih, saya menambahkan variabel ini beberapa waktu sebelumnya dan lupa menonaktifkannya. Kamu berhasil!
Rodrigo Recio
1
Wow terima kasih, tanpa itu saya tidak akan pernah menangkap bug lil saya. Ya sekrup Apple untuk semua info debug bergulir buggy mereka
ShadowLightz
Memang. Terima kasih!
Senocico Stelian
86

Dalam Xcode 9 dan Swift 4:

Cetak tumpukan pengecualian untuk mengetahui alasan pengecualian:

  1. Pergi untuk menunjukkan navigator titik istirahat.
  2. Tambahkan (+) Tambahkan Exception Breakpoint.

  3. Pilih breakpoint baru, Control-Click, Edit Breakpoint.

  4. Tambahkan Aksi dan Enter: po $ arg1

masukkan deskripsi gambar di sini

Ahmed Lotfy
sumber
3
Perlu dicatat bahwa Tindakan perlu menjadi 'Perintah Debugger' karena ada berbagai opsi tindakan seperti apa yang harus dilakukan untuk melempar pengecualian. Tapi itu sangat membantu saya! Terima kasih!
Todd
Jawaban Terbaik! Kadang-kadang saya mendapatkan kesalahan ini jauh di dalam pod atau lib tanpa informasi lebih lanjut. Setelah saya membaca jawaban Anda berbulan-bulan yang lalu, saya menggunakannya berkali-kali dan itu membantu saya setiap saat.
user8675
1
Jawaban itu harus diarahkan sebagai "cara membuat Xcode debugger berfungsi"
Pier Giorgio Misley
Jawaban terbaik pasti, itu banyak membantu saya.
Okan Kurtuluş
8

Dalam kasus saya, saya memanggil metode delegasi tetapi metode itu tidak dinyatakan.

Kesalahan ini bersifat umum dan dapat muncul karena sejumlah alasan. Pastikan Anda belum menonaktifkan Log Anda untuk benar-benar melihat apa yang terjadi. Aktifkan OS_ACTIVITY_MODE dalam skema jika Anda telah menonaktifkannya. Anda mungkin telah menonaktifkannya untuk mencegah banyak log yang tidak relevan tetapi mereka berguna.

Anda juga dapat melacak penyebabnya dengan lebih detail dengan menambahkan breakpoint pengecualian po $arg1. Seperti yang sudah disebutkan oleh Ahmed-Lotfi

Berikut adalah daftar periksa umum yang dapat Anda lalui.

2) Check if you have renamed an IBOutlet and calling it
3) Check if you have renamed a method name or the method doesn't exist
4) Check if you are trying to add or remove any view from hierarchy
5) Check for any missing framework or library
6) Check if you’ve forgot to register your custom cell identifier
7) Check for any missing flag in the Proejct Setting (-obj) or any other linker flag etc.
Naveed Abbas
sumber
1
Daftar bagus! Dalam kasus saya, saya lupa mendaftarkan pengidentifikasi sel khusus saya. Mungkin perlu ditambahkan ke daftar Anda karena itu bisa menjadi hal sederhana yang cukup mudah untuk dilupakan.
luismgb
7

Solusi lain tidak berfungsi dari saya, ini milik saya. Ini hanya berlaku untuk Xcode 8 saat berjalan dalam mode lawas Swift 2.3 :

Sepertinya Interface Builder sedang mencoba untuk mengubah nama metode yang harus dihubungkan ke tombol.

Ini radar dengan lebih detail.

Solusinya (solusinya) adalah secara manual mengganti nama parameter metode ke _:

@IBAction func editPictureTapped(sender: UIButton) {  // not working
    print("Tapped")
}

Ubah ini:

@IBAction func editPictureTapped(_: UIButton) {     // working OK
    print("Tapped")
}
Andrej
sumber
5

Itu juga bisa salah Nama Pengidentifikasi Segue. Misalnya -

performSegueWithIdentifier("wrongSegueName", sender: self)
M_R_K
sumber
4

Situasi saya sedikit berbeda, saya mencoba untuk membagi menjadi UINavigationController, dan apa yang diperbaiki bagi saya adalah mendapatkan bagian antrian utama.

Untuk Objective-C:

dispatch_async(dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"SegueName" sender:self];
});

Untuk Swift 3:

DispatchQueue.main.async { [weak self] in
    self?.performSegue(withIdentifier: "SegueName", sender: self)
}
Simon
sumber
3

Ini mulai terjadi pada saya di Xcode 7, dan saya tidak punya outlet dengan bendera kuning yang bisa saya hapus.

Satu-satunya hal yang berhasil bagi saya adalah mengganti baris ini di AppDelegate:

[window addSubview:viewController.view];

untuk:

[window setRootViewController:viewController];
Eran Talmor
sumber
3

Bagi saya, masalahnya ada di IBAction saya dengan UIButton.

Saat Anda Ctrl + Seret untuk membuat IBAction dari UIButton, pastikan untuk memilih "UIButton" dari dropdown Type. Pilihan default AnyObject menyebabkan aplikasi mogok ketika Anda mengetuk tombol UIB.

masukkan deskripsi gambar di sini

Chris Livdahl
sumber
Saya memiliki Jenis Tindakan yang disetel ke AnyObject, tetapi dalam kasus saya itu tidak berfungsi.
Andrej
Jika Anda membaca posting saya, saya menegaskan bahwa AnyObject tidak berfungsi, seperti yang Anda temukan.
Chris Livdahl
3

Itu juga bisa menjadi Segues Dipicu rusak, periksa di storyboard Anda, segera setelah Anda menghubungkan kembali segues atau outlet itu semua harus bekerja lagi.

Periksa Segues

Pastikan IdentifierSegue benar dan mirip dengan kode Anda .

masukkan deskripsi gambar di sini

Cons Bulaquena
sumber
2

Saya mengalami masalah ini ketika saya mengubah nama variabel yang terhubung ke salah satu tombol saya. Jadi ingatlah itu!

Sami
sumber
2

Saya baru mengenal Xcode, jadi butuh beberapa jam untuk mencari tahu masalah ini untuk memuat file xls. Saya mengikuti sebagian besar kode sampel di sana dan tidak ada yang memecahkan kesalahan Xcode yang ditunjukkan.

Solusi yang saya temukan adalah bahwa kita perlu menentukan 'Tambahkan ke target:' centang proyek untuk menambahkan, ketika kita mengimpor file xls ke Xcode dengan drag dan drop ke Project -> File Pendukung.

Mark Khor
sumber
1

mungkin ada lebih dari 1 IBAction untuk tombol di view controller Anda, coba cari tahu itu dan hapus semua item sebelumnya untuk tombol itu di controller Anda dan buat tombol baru. Ini akan menyelesaikan masalah Anda.

Amit Verma
sumber
1

Pastikan Anda tidak secara dinamis menerapkan batasan relatif ke tampilan yang belum ada dalam hierarki tampilan.

UIView *bottomView = [[UIView alloc] initWithFrame:CGRectZero];
[self.view addSubview:bottomView];

bottomConstraint = [NSLayoutConstraint constraintWithItem:bottomView
                                                attribute:NSLayoutAttributeBottom
                                                relatedBy:NSLayoutRelationEqual
                                                   toItem:self.view
                                                attribute:NSLayoutAttributeBottom
                                               multiplier:1
                                                 constant:0];
bottomConstraint.active = YES;

Dalam contoh di atas, bottomView telah menjadi bagian dari hierarki tampilan sebelum menerapkan batasan relatif padanya.

Vipin
sumber
1

Saya mendapatkan kesalahan ini dalam 2 cara berikut:

Saya mendapatkan kesalahan ini ketika saya mendorong ke UIViewController lain.

NAMUN oleh kesalahan saya subclass kelas lain dari UITabBarControllerdan mendapatkan kesalahan ini.

Bagaimana saya memperbaikinya? Saya subclass dari UIViewControllerdan saya tidak lagi crash :)


Saya tidak ingin menggunakan storyboard. Jadi saya menghapusnya. Namun saya lupa untuk menghapus referensi di pengaturan Proyek . Saya baru saja mengklik proyek >> Umum >> Info Penempatan >> dan saya kemudian mengatur Antarmuka Utama ke ruang kosong. (Itu sebelumnya diatur ke utama)

Seperti yang Anda lihat untuk kedua situasi Anda mendapatkan kesalahan untuk mengakses beberapa objek yang memang ada ...

Madu
sumber
1

Saya akan menambahkan masalah saya ke daftar solusi yang mungkin kalau-kalau ada orang lain terjadi pada utas ini.

Pengidentifikasi sel TableView. Pertama, pastikan sel Anda memiliki pengenal. Kedua, pastikan Anda mereferensikan pengidentifikasi itu ketika Anda mengeluarkan sel.

Waktu Embun
sumber
1

Swift 4 :

Saya mendapatkan kesalahan ini karena perubahan pada api UIVisualEffectView. Di Swift 3, boleh saja melakukan ini: myVisuallEffectView.addSubview(someSubview)

Tetapi dalam Swift 4 saya harus mengubahnya menjadi ini: myVisualEffectView.contentView.addSubview(someSubview)

kesendirian
sumber
1

Saya memiliki kesalahan yang sama ketika saya salah ketik untuk salah satu tampilan sementara membangun kendala menggunakan formatter visual. Saya harap itu membantu seseorang ... atau saya lagi suatu hari nanti.

budidino
sumber
0

Dalam kasus saya, itu adalah UIAlertView di iPad: UIAlertController rusak (iPad) . Saya tidak mengatur sourceView dan sourceRect.

Ralf Hundewadt
sumber
0

Untuk kasus saya, Xcode 8.2.1 , saya memiliki Tampilan Kit Peta di pengontrol tampilan. Jadi saya pergi ke

Bangun Fase> Tautkan Biner Dengan Perpustakaan

dan menambahkan MapKit.framework, maka itu baik-baik saja.

Saya pikir ini juga akan berlaku untuk pandangan lain yang membutuhkan kerangka kerja.

PS Running di iOS 9 memberi tahu saya bahwa ada masalah tentang Map Kit View, sedangkan di iOS 10 tidak ada yang memberi tahu saya!

Protocole
sumber
0

Hanya solusi "drop armageddon" yang bekerja untuk saya:

  • hapus aplikasi dari perangkat
  • proyek bersih
  • jalankan instalasi baru di perangkat
Juan Fran Jimenez
sumber
0

Dalam kasus saya, XCode mulai lelah dan gagal memulai aplikasi dengan pesan ini, karena pernyataan gagal (yang ditetapkan oleh kode kami).

Berjalan di perangkat lain menunjukkan kegagalan pernyataan, yang dapat kami perbaiki, dan semuanya kembali normal.

Ege Akpinar
sumber
0

Untuk Swift 2.3

Tampaknya ini adalah bug dengan Xcode 8 dan Swift 2.3, jika Anda menghubungkan aksi tombol ke kode Anda melalui storyboard pastikan bahwa Xcode tidak mengganti nama tindakan, bagi saya itu menambahkan withSender: di akhir metode , jadi apa yang saya lakukan adalah pergi ke kode saya dan mengganti nama metode agar sesuai dengan yang Xcode tulis.

Untuk versi lain periksa jawaban yang benar.

Fernando Mata
sumber
0

Dalam kasus saya, itu adalah InterfaceBuilder. Saya telah menyalin beberapa Tampilan dari ViewController lain yang mengacaukan kendala.

Di InterfaceBuilder saya mengalami kesalahan panah merah pada ViewController.

Selama eksekusi, aplikasi macet.

Vincent
sumber
0

Dalam kasus saya, aplikasi mogok karena saya tidak menetapkan target keanggotaan papan cerita.

fredpi
sumber
0

Dalam kasus saya, proyek Build Settingsberisi beberapa direktori yang tidak ada untuk Framework Search Pathsdan Library Search Paths.

Manuel
sumber
0

Saya punya dua masalah:

1) Target saya tidak memiliki view controller termasuk yang digunakan dalam file storyboard.

2) Papan cerita saya berusia sekitar 3 tahun, saya harus membuat ulang salah satu pengontrol tampilan di pengontrol tab bar dari awal (hanya memiliki UITextField dan saya masih tidak tahu mengapa itu tidak berfungsi)

Genki
sumber
0

Namun kemungkinan penyebab lain:

Dalam kasus saya, saya punya xibdan menelepon Bundle.main.loadNibNamed(...pada titik mana itu mengalami crash. Semua milikku IBOutletsdan IBActionstampak baik-baik saja. Pada akhirnya saya perhatikan bahwa nibsebenarnya sedang memuat, tetapi kemudian ketika saya mencoba mengakses tampilan pertama (dan hanya) ( nib.first), itu tidak berfungsi. Bahkan nib.countmengembalikan integer yang sangat besar (max int?), Bukan yang diharapkan1 . Saya mencoba menambahkan kembali tampilan, tetapi tetap tidak berhasil.

Pada akhirnya, saya menghapus seluruh xibfile dan mulai lagi (tapi saya menyimpan beberapa tampilan di clipboard saya sehingga saya bisa menempelkannya daripada menciptakannya lagi).

Ini berhasil!

Nikolay Suvandzhiev
sumber
0

Ini bisa terjadi jika Anda memiliki tabel dan lupa untuk menetapkan UITableViewDelegate dan UITableViewDataSource ke kelas

pengguna3561494
sumber