libc ++ abi.dylib: terminando con un'eccezione non rilevata di tipo NSException (lldb)


186

Sto programmando un'app in modo rapido e quando eseguo l'app di prova sul simulatore di iPhone tutto funziona, ma poi provo a scorrere a destra, che è un gesto che ho aggiunto per andare alla pagina successiva (Visualizza controller due) si arresta in modo anomalo e mostra questo rapporto di errore nel registro della console.

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
È molto probabile che tu abbia collegato qualcosa in un NIB che non esiste più. Sembra che il crash si verifichi quando viene caricata la vista a cui stai tentando di passare. Vorrei controllare tutti gli sbocchi nel riquadro ispettore (a destra) e assicurarmi che siano presenti? Ciò potrebbe accadere anche se hai collegato un pulsante a un'IBAction che non esiste più (o è stato rinominato)
cmyr

Non c'è nulla che non viene utilizzato e mi sta ancora dando l'errore.
Nick,

Se stai usando Xcode 8 con la modalità legacy di Swift 2.3, vedi questa risposta: stackoverflow.com/a/39548326/5175709
Honey

6
In generale, vai sempre alla console, premi in cmmd + Fmodo da poter cercare all'interno della console e cercare l' app di chiusura a causa di un'eccezione non rilevata , esattamente 1 riga dopo vedrai il motivo: che ti dice il motivo per cui l'app è andata in crash. (sì, ho avuto questo errore troppe volte :)
Honey

1
Potrebbe anche essere utile creare Breakpoint di eccezione in Debug-> Breakpoint. Si spera quindi che il debugger si fermi sulla riga di codice in cui si trova il problema.
Chuck Boris,

Risposte:


394

CMYR - "potrebbe accadere anche se hai collegato un pulsante a una IBAction che non esiste più (o è stata rinominata)"

Se stai riscontrando questo problema, assicurati di andare su Main.storyboard, fai clic con il pulsante DESTRO sull'icona della casella gialla (visualizza controller) nella parte superiore del profilo del telefono ed ELIMINA le prese con bandiere gialle.

Quello che succede in casi come questo è che probabilmente hai chiamato un'azione, quindi ribattezzata. Devi eliminare il vecchio nome e se quello era l'unico problema si avvierà subito in sim!

inserisci qui la descrizione dell'immagine


9
Ottima risposta, grazie! Questo è un difetto SERIO con XCode. La gestione degli errori richiede molto sviluppo.
HyperionX

3
Ho anche avuto il problema con i triangoli gialli, ma riparare solo quei triangoli non mi ha risolto l'incidente. :(
Andrej,

Questo mi è successo dopo aver rinominato un @IBOutlet
Mohammed Fadhl,

Dovresti ricontrollare per accertarti che lo storyboard sia incluso nel Target o no
hoangtuanfithou,

Basta rivedere i riferimenti di punti vendita e azioni in Ispezione connessioni sullo storyboard
Álvaro Agüero

95

Hai impostato la variabile OS_ACTIVITY_MODE per caso? Per verificare se hai impostato questa variabile (e disattivarla), in Xcode 9, procedi come segue:

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
Grazie! Non ho visto il motivo dell'incidente a causa di ciò: "selettore non riconosciuto inviato in classe"
Denis Kutlubaev,

14
Buon dolore, Apple. I loro bug del sistema operativo non risolti ci costringono ad accenderlo e quindi perdiamo i messaggi di debug importanti. Bella cattura, Siddhesh.
Nate,

Grazie, ho aggiunto questa variabile qualche tempo prima e ho dimenticato di disabilitarlo. L'hai inchiodato!
Rodrigo Recio,

1
Caspita grazie, senza che non avrei mai preso il mio piccolo bug. Sì, fanculo Apple per tutte le informazioni di debug a scorrimento con errori
ShadowLightz,

Infatti. Grazie!
Senocico Stelian,

86

In Xcode 9 e Swift 4:

Stampa lo stack delle eccezioni per conoscere il motivo dell'eccezione:

  1. Vai a mostrare navigatore punto di interruzione.
  2. Aggiungi (+) Aggiungi punto di interruzione eccezione.

  3. Seleziona il nuovo punto di interruzione, fai clic tenendo premuto il tasto Ctrl, Modifica punto di interruzione.

  4. Aggiungi azione e invio: po $ arg1

inserisci qui la descrizione dell'immagine


3
Va notato che l'azione deve essere un "comando di debugger" in quanto vi sono varie opzioni su quale tipo di azione intraprendere per lanciare l'eccezione. Ma mi ha davvero aiutato! Grazie!
Todd,

Migliore risposta! A volte ho riscontrato questo errore nel profondo dei pod o delle librerie senza ulteriori informazioni. Dopo aver letto la tua risposta mesi fa, l'ho usata molte volte e mi ha aiutato ogni volta.
user8675

1
Questa risposta dovrebbe essere indicata come "come far funzionare il debugger Xcode"
Pier Giorgio Misley,

Sicuramente la risposta migliore, mi ha aiutato molto.
Okan Kurtuluş,

8

Nel mio caso, stavo chiamando un metodo delegato ma il metodo non è stato dichiarato.

Questo errore è generico e può apparire per diversi motivi. Assicurati di non aver disabilitato i tuoi log per vedere effettivamente cosa è successo. Abilita OS_ACTIVITY_MODE negli schemi se lo hai disabilitato. Potresti averlo disabilitato per evitare molti registri irrilevanti ma sono utili.

È inoltre possibile rintracciare la causa in maggiori dettagli aggiungendo un punto di interruzione di eccezione po $arg1. Come già accennato da Ahmed-Lotfi

Ecco una lista di controllo comune che puoi consultare.

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
Bella lista! Nel mio caso, avevo dimenticato di registrare l'identificatore della mia cella personalizzata. Potrebbe valere la pena aggiungere alla tua lista poiché può essere una cosa semplice che è abbastanza facile da dimenticare.
luismgb,

7

Altre soluzioni non hanno funzionato da me, ecco la mia. Si applica solo a Xcode 8 quando si esegue in modalità legacy Swift 2.3 :

Sembra che Interface Builder stia provando a rinominare il metodo che dovrebbe essere collegato al pulsante.

Ecco un radar con maggiori dettagli.

La soluzione (soluzione alternativa) consiste nel sostituire manualmente il nome del parametro del metodo in _:

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

Cambia in questo:

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

5

Potrebbe anche essere sbagliato Nome identificativo Segue. Per esempio -

performSegueWithIdentifier("wrongSegueName", sender: self)

4

La mia situazione era un po 'diversa, stavo provando a seguirne una UINavigationController, e ciò che la risolveva per me era ottenere la parte della coda principale.

Per Objective-C:

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

Per Swift 3:

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

3

Questo ha cominciato a succedere per me su Xcode 7 e non avevo punti vendita con bandiere gialle che potevo eliminare.

L'unica cosa che ha funzionato per me è stata la sostituzione di questa riga in AppDelegate:

[window addSubview:viewController.view];

per:

[window setRootViewController:viewController];

3

Per me, il problema era nella mia IBAction con un UIButton.

Quando premi Ctrl + Trascina per creare un IBAction da un UIButton, assicurati di selezionare "UIButton" dal menu a discesa Tipo. La selezione predefinita di AnyObject provoca l'arresto anomalo dell'app quando si tocca il pulsante UIB.

inserisci qui la descrizione dell'immagine


Avevo Action Type impostato su AnyObject, ma nel mio caso non funzionava.
Andrej,

Se leggi il mio post, sottolineo che AnyObject non funziona, come hai scoperto.
Chris Livdahl,

3

Potrebbe anche essere un Triggered Segues rotto, controlla nello storyboard, non appena ricolleghi i segues o lo sbocco tutto dovrebbe funzionare di nuovo.

Controlla i Segues

Assicurati che il IdentifierSegue sia corretto e simile al tuo codice .

inserisci qui la descrizione dell'immagine


2

Ho riscontrato questo problema quando ho cambiato il nome della variabile che si collegava a uno dei miei pulsanti. Quindi tienilo a mente!


2

Sono nuovo di Xcode, quindi mi ci sono volute alcune ore per capire il problema per caricare il file xls. Ho seguito la maggior parte dei codici di esempio lassù e nessuno di essi risolve l'errore Xcode mostrato.

La soluzione che ho trovato è stata la necessità di specificare 'Aggiungi alle destinazioni:' selezionare il progetto da aggiungere, quando importiamo il file xls in Xcode trascinandolo in Progetto -> File di supporto.


1

potrebbe esserci più di 1 IBAction per un pulsante nel controller della vista provare a scoprirli e rimuovere tutti gli elementi precedenti per quel pulsante nel controller e creare un nuovo pulsante. Risolverà il problema.


1

Assicurarsi di non applicare dinamicamente i vincoli relativi a una vista che non è ancora presente nella gerarchia della vista.

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;

Nell'esempio sopra, bottomView è stato inserito nella gerarchia della vista prima di applicare relativi vincoli.


1

Ho riscontrato questo errore nei seguenti 2 modi:

Stavo ricevendo questo errore quando stavo spingendo in un altro UIViewController.

TUTTAVIA per errore ho sottoclassato l'altra classe da UITabBarControllere stavo ottenendo questo errore.

Come l'ho risolto? Ho eseguito la sottoclasse da UIViewControllere non mi ero più schiantato :)


Non volevo usare lo storyboard. Quindi l'ho cancellato. Eppure dimentico di eliminare il suo riferimento nelle impostazioni del progetto . Ho appena fatto clic sul progetto >> Generale >> Informazioni sulla distribuzione >> e quindi ho impostato l'interfaccia principale su spazio nero. (Era precedentemente impostato su principale)

Come puoi vedere per entrambe le situazioni, ricevi un errore per l'accesso ad un oggetto esistente ...


1

Ho intenzione di aggiungere il mio problema all'elenco delle possibili soluzioni nel caso in cui altri si imbattano in questo thread.

Identificatore di cella TableView. Prima di tutto assicurati che il tuo cellulare abbia un identificatore. In secondo luogo, assicurati di fare riferimento a quell'identificatore quando si rimuove la cella.


1

Swift 4 :

Stavo ottenendo questo errore a causa di una modifica dell'API UIVisualEffectView. In Swift 3 era ok fare questo: myVisuallEffectView.addSubview(someSubview)

Ma in Swift 4 ho dovuto cambiarlo in questo: myVisualEffectView.contentView.addSubview(someSubview)


1

Ho avuto questo stesso errore quando ho avuto un refuso per una delle viste durante la creazione di vincoli utilizzando il formattatore visivo. Spero che possa aiutare qualcuno ... o me di nuovo un giorno.




0

Nel mio caso, Xcode 8.2.1 , avevo una vista Kit mappa in un controller di visualizzazione. Quindi sono andato a

Crea fasi> Collega binario con librerie

e aggiunto MapKit.framework, poi andava bene.

Penso che ciò si applicherà anche ad altre opinioni che richiedono un quadro.

PS in esecuzione su iOS 9 mi ha detto che c'era un problema con Map Kit View, mentre su iOS 10 non mi ha detto nulla!


0

Solo la soluzione "drop armageddon" ha funzionato per me:

  • rimuovere l'app dal dispositivo
  • progetto pulito
  • eseguire una nuova installazione sul dispositivo

0

Nel mio caso, XCode si è stancato e non è riuscito ad avviare l'app con questo messaggio, a causa di un'asserzione fallita (che è stata impostata dal nostro codice).

L'esecuzione su un altro dispositivo ha mostrato l'errore di asserzione, che siamo stati in grado di risolvere, e tutto è tornato alla normalità.


0

Per Swift 2.3

Questo sembra essere un bug con Xcode 8 e Swift 2.3, se stai collegando l'azione del pulsante al tuo codice tramite storyboard assicurati che Xcode non abbia rinominato l'azione, per me sta aggiungendo un withSender: alla fine dei metodi , quindi quello che faccio è andare al mio codice e rinominare il metodo in modo che corrisponda a quello scritto da Xcode.

Per qualsiasi altra versione controlla la risposta corretta.


0

Nel mio caso, era InterfaceBuilder. Avevo copiato alcune viste da un altro ViewController che ha incasinato i vincoli.

In InterfaceBuilder ho avuto l'errore di freccia rossa sul ViewController.

Durante l'esecuzione l'app si è arrestata in modo anomalo.


0

Nel mio caso, l'app si è bloccata perché non ho impostato l'appartenenza target dello storyboard.


0

Nel mio caso il progetto ne Build Settingsconteneva alcune in directory inesistenti per Framework Search Pathse Library Search Paths.


0

Ho avuto due problemi:

1) Il mio obiettivo non includeva il controller di visualizzazione incluso nel file dello storyboard.

2) Il mio storyboard aveva circa 3 anni, dovevo ricreare da zero uno dei controller di visualizzazione nel controller della barra delle schede (aveva solo un UITextField e ancora non so perché non funzionasse)


0

Ancora un'altra possibile causa:

Nel mio caso, avevo un xibe stavo chiamando Bundle.main.loadNibNamed(...a quel punto si stava schiantando. Tutto mio IBOutletse IBActionssembrava a posto. Alla fine ho notato che il nibcaricamento era effettivamente in corso, ma quando ho provato ad accedere alla prima (e unica) vista ( nib.first), non funzionava. In effetti nib.countstava restituendo un intero molto grande (max int?), Invece del previsto1 . Ho provato ad aggiungere nuovamente la vista, ma non ho ancora avuto fortuna.

Alla fine, ho eliminato l'intero xibfile e ho ricominciato (ma ho mantenuto alcune delle visualizzazioni negli appunti in modo da poterle incollare invece di ricrearle di nuovo).

Questo ha funzionato!


0

Questo può accadere se si dispone di una tabella e si dimentica di assegnare UITableViewDelegate e UITableViewDataSource alla classe

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.