libc ++ abi.dylib: NSException (lldb) türü yakalanmamış istisna ile sonlandırma


186

Bir uygulamayı hızlı bir şekilde programlıyorum ve iPhone simülatöründe test uygulamasını çalıştırdığımda her şey çalışıyor, ancak sonra sağa kaydırmaya çalışıyorum, bu da bir sonraki Sayfaya gitmesi için eklediğim bir jest (View Controller Two) çöküyor ve konsol günlüğünde bu hata raporunu gösteriyor.

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) 

8
Büyük olasılıkla bir NIB'de artık var olmayan bir şey bağlamışsınızdır. Görünüşe göre, çökmeye çalıştığınız görünüm yükleniyor. Müfettiş bölmesindeki tüm çıkışları (sağda) kontrol eder ve hazır olduklarından emin olur muyum? Bu, artık mevcut olmayan (veya yeniden adlandırılmış) bir IBAction'a bir düğme
bağladıysanız da olabilir

Kullanılmayan hiçbir şey yok ve hala bana hata veriyor.
Nick

Eğer varsa Swift 2.3 miras modu ile Xcode 8 kullanarak bu cevaba bakınız: stackoverflow.com/a/39548326/5175709
Bal

6
Genel olarak, her zaman konsola gidin, vurun , cmmd + Fböylece konsolun içinde arama yapabilir ve yakalanmamış istisna nedeniyle Terminating uygulamasını arayabilirsiniz , bundan tam olarak 1 satır sonra nedeni göreceksiniz : bu, uygulamanızın kilitlenmesinin nedenini gösterir. (evet bu hatayı birçok kez yaşadım :)
Honey

1
Hata Ayıkla-> Kesme Noktalarında İstisna Kesme Noktası oluşturmak da yararlı olabilir . Hata ayıklayıcı umarım sorunun bulunduğu kod satırında durmalıdır.
Chuck Boris

Yanıtlar:


394

CMYR - "artık mevcut olmayan (veya yeniden adlandırılmış) bir IBAction'a bir düğme bağladıysanız da olabilir"

Bu sorunla karşılaşıyorsanız, Main.storyboard'a gittiğinizden emin olun, SAĞ telefonun üst kısmındaki sarı kutu simgesini (görünüm denetleyicisi) tıklayın ve çıkışları sarı bayraklarla SİLİN.

Bunun gibi durumlarda, muhtemelen bir eylemi adlandırdınız ve daha sonra yeniden adlandırdınız. Eski adı silmeniz gerekir ve eğer tek sorun buysa sim ile başlayacaktır!

resim açıklamasını buraya girin


9
Harika cevap, teşekkürler! Bu XCode ile CİDDİ bir kusur. Hata işleme çok gelişmelidir.
HyperionX

3
Ayrıca sarı üçgenlerle ilgili bir sorunum vardı, ancak sadece bu üçgenleri düzeltmek benim için çökmeyi çözmedi. :(
Andrej

Bu bir @IBOutlet adını değiştirdikten sonra başıma geldi
Mohammed Fadhl

Film şeridinin Hedefe dahil
edilip

Storyboard'daki Connections Inspector'daki çıkışları ve eylem referanslarını gözden geçirin
Álvaro Agüero

95

OS_ACTIVITY_MODE değişkenini şans eseri belirlediniz mi? Bu değişkenin ayarlanmış olup olmadığını kontrol etmek (ve kapatmak) için, Xcode 9'da aşağıdakileri yapın:

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


1
Teşekkürler! Bu yüzden çökme sebebini görmedim: "tanınmayan seçici sınıfa gönderildi"
Denis Kutlubaev

14
İyi keder Apple. Onların düzeltilmemiş işletim sistemi hataları bizi açmaya zorlar ve daha sonra gerçek önemli hata ayıklama mesajlarını kaçırırız. İyi yakaladım, Siddhesh.
Nate

Teşekkürler, bu değişkeni bir süre önce ekledim ve devre dışı bırakmayı unuttum. Başardın!
Rodrigo Recio

1
Vay canına teşekkürler, bu olmadan lil hatamı asla yakalayamazdım. Evet, tüm buggy kaydırma hata ayıklama bilgisi için Apple vida
ShadowLightz

Aslında. Teşekkürler!
Senocico Stelian

86

Xcode 9 ve Swift 4'te:

Kural dışı durumun nedenini öğrenmek için kural dışı durum yığınını yazdırın:

  1. Kırılma noktası gezginini göstermeye git.
  2. Ekle (+) İstisna Kesme Noktası Ekle.

  3. Yeni kesme noktasını seçin, Control-Click, Kesme Noktasını Düzenle.

  4. Eylem Ekle ve Gir: po $ arg1

resim açıklamasını buraya girin


3
İstisna atmak için ne tür bir Eylemin gerçekleştirileceği konusunda çeşitli seçenekler olduğu için, Eylemin bir 'Hata Ayıklayıcı Komutu' olması gerektiğine dikkat edilmelidir. Ama bu gerçekten bana yardımcı oldu! Teşekkürler!
Todd

En iyi cevap! Bazen bu hatayı baklalarda veya kitaplarda derinlemesine daha fazla bilgi almadan aldım. Cevabınızı aylar önce okuduktan sonra, birçok kez kullandım ve her seferinde bana yardımcı oldum.
user8675

1
Bu cevap "Xcode hata ayıklayıcısının nasıl çalışacağı" şeklinde gösterilmelidir
Pier Giorgio Misley

Kesinlikle en iyi cevap, bana çok yardımcı oldu.
Okan Kurtuluş

8

Benim durumumda bir temsilci yöntemi çağırıyordum ama yöntem bildirilmedi.

Bu hata geneldir ve çeşitli nedenlerle ortaya çıkabilir. Gerçekte ne olduğunu görmek için Günlüklerinizi devre dışı bırakmadığınızdan emin olun. Devre dışı bıraktıysanız şemalarda OS_ACTIVITY_MODE özelliğini etkinleştirin . Alakasız günlükleri önlemek için devre dışı bırakmış olabilirsiniz, ancak kullanışlılar.

İstisna kesme noktası ekleyerek nedeni daha ayrıntılı olarak da izleyebilirsiniz po $arg1. Ahmed-Lotfi tarafından daha önce de belirtildiği gibi

İşte geçebileceğiniz ortak bir kontrol listesi.

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.

1
Güzel liste! Benim durumumda, özel hücrenin tanımlayıcısını kaydetmeyi unutmuştum. Listenize eklemeye değer olabilir, çünkü unutulması oldukça kolay olan basit bir şey olabilir.
luismgb

7

Diğer çözümler işe yaramadı, işte benim. Swift 2.3 eski modunda çalışırken yalnızca Xcode 8 için geçerlidir :

Interface Builder, düğmeye bağlanması gereken yöntemi yeniden adlandırmaya çalışıyor gibi görünüyor.

İşte daha fazla ayrıntıya sahip bir radar .

Çözüm (geçici çözüm) yöntem parametre adını el ile şu şekilde değiştirmektir _:

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

Bunu değiştirin:

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

5

Ayrıca Segue Identifier Name de yanlış olabilir. Örneğin -

performSegueWithIdentifier("wrongSegueName", sender: self)

4

Durumum biraz farklıydı UINavigationController.

Objective-C için:

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

Swift 3 için:

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

3

Bu benim için Xcode 7'de olmaya başladı ve sarı bayrakları silebileceğim hiçbir çıkışım yoktu.

Benim için işe yarayan tek şey AppDelegate'teki bu satırı değiştirmekti:

[window addSubview:viewController.view];

için:

[window setRootViewController:viewController];

3

Benim için sorun bir UIButton ile IBAction'ımdaydı.

Bir UIButton'dan IBAction oluşturmak için Ctrl + Sürüklediğinizde, Tür açılır menüsünden "UIButton" u seçtiğinizden emin olun. Varsayılan AnyObject seçimi, UIBdüğmesine dokunduğunuzda uygulamanın çökmesine neden olur.

resim açıklamasını buraya girin


Eylem Türü AnyObject için ayarlanmış, ancak benim durumumda işe yaramadı.
Andrej

Yazımı okursanız, bulduğunuz gibi AnyObject'in işe yaramadığı noktasını belirtirim.
Chris Livdahl

3

Ayrıca, kırık bir Tetiklenmiş Segues olabilir, film şeridinizi kontrol edin , segues'leri yeniden bağlar bağlamaz veya priz tekrar çalışırsa.

Segues'leri kontrol edin

IdentifierSegue öğesinin doğru ve kodunuza benzer olduğundan emin olun .

resim açıklamasını buraya girin


2

Düğmelerimden birine bağlanan değişkenin adını değiştirdiğimde bu sorunla karşılaştım. Bunu aklınızda bulundurun!


2

Ben Xcode için yeniyim, bu yüzden xls dosyasını yüklemek için sorunu çözmem birkaç saat sürdü. Örnek kodların çoğunu orada takip ettim ve hiçbiri gösterilen Xcode hatasını çözmedi.

Bulduğum çözüm, xls dosyasını Xcode'a sürükleyip Project -> Destek Dosyalarına bırakarak eklediğimizde, 'Hedeflere ekle:' belirtmemiz gerektiğiydi.


1

görünüm denetleyicinizde bir düğme için 1'den fazla IBAction olabilir, bunları bulmayı ve denetleyicinizdeki o düğme için önceki tüm öğeleri kaldırmayı deneyin ve yeni düğme oluşturun.


1

Henüz görünüm hiyerarşisinde bulunmayan bir görünüme göreli kısıtlamalar uygulamadığınızdan emin olun.

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;

Yukarıdaki örnekte, bottomView , göreli kısıtlamalar uygulanmadan önce görünüm hiyerarşisinin bir parçası haline getirilmiştir.


1

Bu hatayı aşağıdaki 2 şekilde aldım:

Başka bir UIViewController içine iterken bu hatayı alıyordum.

ANCAK yanlışlıkla diğer sınıfı alt sınıflara ayırdım UITabBarController ve bu hatayı alıyordu.

Nasıl düzelttim? Alt sınıftan geldim UIViewControllerve artık çökmüyordum :)


Film şeridi kullanmak istemedim. Ben de sildim. Yine de referansını Proje ayarlarından silmeyi unutuyorum . Projeyi yeni tıkladım >> Genel >> Dağıtım Bilgileri >> ve sonra Ana Arabirimi kara boşluğa ayarladım. (Önceden ana ayarlanmıştı)

Her iki durumda da görebileceğiniz gibi, var olan bir nesneye erişirken hata alıyorsunuz ...


1

Bu iş parçacığında başka biri olursa, olası çözümler listesine sorunumu ekleyeceğim.

TableView hücre tanımlayıcısı. Öncelikle, hücrenizin bir tanımlayıcıya sahip olduğundan emin olun. İkinci olarak, hücreyi ayıkladığınız zaman bu tanımlayıcıya başvurduğunuzdan emin olun.


1

Hızlı 4 :

UIVisualEffectView API'sindeki bir değişiklik nedeniyle bu hatayı alıyordum. Swift 3'te bunu yapmak iyiydi: myVisuallEffectView.addSubview(someSubview)

Ama Swift 4'te bunu değiştirmek zorunda kaldım: myVisualEffectView.contentView.addSubview(someSubview)


1

Görsel biçimlendirici kullanarak kısıtlamalar oluştururken görünümlerden biri için bir yazım hatası vardı aynı hatayı vardı. Umarım bu birisine yardım eder ... ya da bana bir gün tekrar.




0

Benim durumum için, Xcode 8.2.1 , bir görünüm denetleyicisinde bir Harita Kiti Görünümü vardı . Ben de gittim

Derleme Aşamaları> İkili Kütüphanelere Bağlama

ve ekledi MapKit.framework, o zaman iyiydi.

Bunun çerçeve gerektiren diğer görüşler için de geçerli olacağını düşünüyorum.

İOS 9'da çalışan PS, Harita Kiti Görünümü ile ilgili bir sorun olduğunu söyledi, iOS 10'da ise bana hiçbir şey söylemedi!


0

Sadece "drop armageddon" çözümü benim için çalıştı:

  • uygulamayı cihazdan kaldır
  • temiz proje
  • cihaza yeni kurulum yap

0

Benim durumumda, XCode yoruluyor ve bir iddianın başarısız olması nedeniyle (bu bizim kodumuz tarafından ayarlandı) bu mesajla uygulamayı başlatamıyor.

Başka bir cihazda koştuğumuzda, düzeltebildiğimiz onaylama hatası gösterildi ve her şey normale döndü.


0

Swift 2.3 için

Bu, Xcode 8 ve Swift 2.3 ile ilgili bir hata gibi görünüyor, düğme eylemini storyboard aracılığıyla kodunuza bağlıyorsanız , Xcode'un eylemi yeniden adlandırmadığından emin olun, benim için bir withSender ekliyor: yöntemlerin sonunda , yani yaptığım benim kod gidiyor ve Xcode yazdı bir maç için yöntemi yeniden adlandırmak.

Diğer sürümler için doğru cevabı kontrol edin.


0

Benim durumumda, InterfaceBuilder oldu. Bazı Views kısıtlamaları berbat başka bir ViewController kopyalamıştı.

InterfaceBuilder ViewController kırmızı ok hatası vardı.

Yürütme sırasında uygulama çöktü.


0

Benim durumumda, uygulama çöktü çünkü film şeridinin hedef üyeliğini belirlemedim.


0

Benim durumumda proje ve Build Settingsiçin mevcut olmayan dizinler içeriyordu .Framework Search PathsLibrary Search Paths


0

İki sorunum vardı:

1) Hedefim, film şeridi dosyasında kullanılan görünüm denetleyicisine sahip değildi.

2) Storyboard'um yaklaşık 3 yaşındaydı, sekme çubuğu denetleyicisindeki görünüm denetleyicilerinden birini sıfırdan yeniden oluşturmak zorunda kaldım (sadece bir UITextField vardı ve hala neden çalışmadığını bilmiyorum)


0

Yine bir başka olası neden:

Benim durumumda, ben vardı xibve Bundle.main.loadNibNamed(...hangi noktada çöküyor çağırıyordu . Hepsi benim IBOutletsve iyi IBActionsgörünüyordu. Sonunda nibaslında yükleme olduğunu fark ettim , ama sonra ilk (ve sadece) görünüm ( nib.first) erişmeye çalıştım , bu çalışma değildi. Aslında nib.countbeklenen yerine çok büyük bir tamsayı (max int?) Döndürüyordu1 . Görünümü tekrar eklemeyi denedim, ama yine de şans yok.

Sonunda, hepsini sildim xib dosyayı ve tekrar başladım (ancak bazı görünümleri panomda tuttum, böylece onları yeniden oluşturmak yerine yapıştırabilirim).

Bu işe yaradı!


0

Bir tablonuz varsa ve sınıfa UITableViewDelegate ve UITableViewDataSource atamayı unutursanız bu gerçekleşebilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.