libc ++ abi.dylib: finalizando com exceção não capturada do tipo NSException (lldb)

186

Estou programando um aplicativo rapidamente e quando executo o aplicativo de teste no simulador do iPhone tudo funciona, mas depois tento deslizar para a direita, que é um gesto que eu adicionei para que ele fosse para a próxima página (View Controller Two) ele trava e mostra esse relatório de erro no log do 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) 
usuario
fonte
8
É mais provável que você tenha conectado algo em um NIB que não existe mais. Parece que a falha ocorreu quando a visualização para a qual você está tentando fazer a transição está sendo carregada. Gostaria de verificar todas as saídas no painel do inspetor (à direita) e garantir que elas estejam presentes? Isso também pode acontecer se você tiver conectado um botão para um IBAction que não existe mais (ou foi renomeado)
cmyr
Não há nada que não esteja sendo usado e ainda está me dando o erro.
19414 Nick
Se você estiver usando o Xcode 8 com o modo legado Swift 2.3 , veja esta resposta: stackoverflow.com/a/39548326/5175709
Honey
6
Em geral, sempre vá para o console, pressione cmmd + Fpara que você possa pesquisar dentro do console e procurar o aplicativo Terminando devido a uma exceção não capturada , exatamente 1 linha depois disso, você verá o motivo: o que indica o motivo pelo qual o aplicativo travou. (Sim, eu já tive esse erro muitas vezes :) #
1717
1
Também pode ser útil criar o ponto de interrupção de exceção em Depurar-> pontos de interrupção. Esperamos que o depurador pare na linha de código em que o problema está localizado.
Chuck Boris

Respostas:

394

CMYR - "isso também pode acontecer se você conectar um botão a um IBAction que não existe mais (ou foi renomeado)"

Se você estiver enfrentando esse problema, certifique-se de acessar o Main.storyboard, clique com o botão direito do mouse no ícone da caixa amarela (ver controlador) na parte superior do contorno do telefone e DELETE as tomadas com bandeiras amarelas.

O que acontece em casos como esse é que você provavelmente nomeou uma ação e a renomeou. Você precisa excluir o nome antigo e, se esse for o único problema, será iniciado no sim!

insira a descrição da imagem aqui

Trapp
fonte
9
Ótima resposta, obrigado! Esta é uma falha SÉRIA com o XCode. A manipulação de erros precisa de muito desenvolvimento.
HyperionX
3
Eu também tive o problema com triângulos amarelos, mas corrigir apenas esses triângulos não resolveu o acidente para mim. :(
Andrej
Isso aconteceu comigo depois de renomear um @IBOutlet que era #
Mohammed Fadhl
Deve verificar com certeza que o storyboard é incluído para o alvo ou não
hoangtuanfithou
Basta revisar as referências de pontos de venda e ações no Connections Inspector no storyboard
Álvaro Agüero
95

Você definiu a variável OS_ACTIVITY_MODE por acaso? Para verificar se você tem essa variável definida (e desativada), no Xcode 9, faça o seguinte:

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
fonte
1
Obrigado! Eu não vi o motivo do travamento por causa disso: "seletor não reconhecido enviado para a classe"
Denis Kutlubaev 23/08/18
14
Boa sorte, Apple. Seus erros de sistema operacional não corrigidos nos forçam a ativar isso e perdemos as mensagens de depuração importantes. Boa captura, Siddhesh.
Nate
Obrigado, eu adicionei essa variável algum tempo antes e esqueci de desativá-la. Você acertou em cheio!
Rodrigo Recio
1
Uau, obrigado, sem isso eu nunca teria pegado meu bug lil. Sim parafuso Apple para todo o seu buggy de informações rolagem de depuração
ShadowLightz
De fato. Obrigado!
Senocico Stelian 06/01
86

No Xcode 9 e Swift 4:

Imprima a pilha de exceções para saber o motivo da exceção:

  1. Vá para mostrar o navegador do ponto de interrupção.
  2. Adicionar (+) Adicionar ponto de interrupção de exceção.

  3. Selecione o novo ponto de interrupção, clique com a tecla Control pressionada e edite o ponto de interrupção.

  4. Adicione ação e insira: po $ arg1

insira a descrição da imagem aqui

Ahmed Lotfy
fonte
3
Deve-se notar que a Ação precisa ser um 'Comando do Depurador', pois existem várias opções de que tipo de Ação a ser executada ao lançar a exceção. Mas isso realmente me ajudou! Obrigado!
Todd
Melhor resposta! Às vezes, eu recebia esse erro profundamente em pods ou libs sem mais informações. Depois de ler sua resposta meses atrás, usei-a várias vezes e me ajudou sempre.
user8675
1
Essa resposta deve ser apontada como "como fazer o depurador do Xcode funcionar"
Pier Giorgio Misley
Definitivamente a melhor resposta, isso me ajudou muito.
Okan Kurtuluş
8

No meu caso, eu estava chamando um método delegado, mas o método não foi declarado.

Este erro é genérico e pode aparecer por vários motivos. Verifique se você não desabilitou seus registros para realmente ver o que aconteceu. Ative OS_ACTIVITY_MODE nos esquemas se você o tiver desativado. Você pode desativá-lo para evitar muitos logs irrelevantes, mas eles são úteis.

Você também pode rastrear a causa em mais detalhes adicionando um ponto de interrupção de exceção po $arg1. Como já mencionado por Ahmed-Lotfi

Aqui está uma lista de verificação comum que você pode seguir.

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.
Abbas Naveed
fonte
1
Boa lista! No meu caso, eu tinha esquecido de registrar o identificador do meu celular personalizado. Pode valer a pena adicionar à sua lista, pois pode ser uma coisa simples e fácil de esquecer.
luismgb 13/04
7

Outras soluções não funcionaram para mim, aqui está a minha. Aplica-se apenas ao Xcode 8 ao executar no Swift 2.3 modo legado :

Parece que o Interface Builder está tentando renomear o método que deve ser conectado ao botão.

Aqui está um radar com mais detalhes.

A solução (solução alternativa) é substituir manualmente o nome do parâmetro do método para _:

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

Mude para isto:

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

Também pode estar errado o nome do identificador de segmento. Por exemplo -

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

Minha situação era um pouco diferente, eu estava tentando entrar em uma UINavigationController, e o que a corrigiu foi a obtenção da parte da fila principal.

Para Objective-C:

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

Para o Swift 3:

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

Isso começou a acontecer para mim no Xcode 7, e eu não tinha tomadas com bandeiras amarelas que eu poderia excluir.

A única coisa que funcionou para mim foi substituir esta linha no AppDelegate:

[window addSubview:viewController.view];

para:

[window setRootViewController:viewController];
Eran Talmor
fonte
3

Para mim, o problema estava no meu IBAction com um UIButton.

Quando você pressiona Ctrl + Arraste para criar uma IBAction a partir de um UIButton, certifique-se de selecionar "UIButton" no menu suspenso Tipo. A seleção padrão de AnyObject faz com que o aplicativo falhe quando você toca no UIButton.

insira a descrição da imagem aqui

Chris Livdahl
fonte
Eu tinha o Tipo de ação definido como AnyObject, mas no meu caso, não funcionou.
Andrej
Se você ler minha postagem, enfatizo que o AnyObject não funciona, como você descobriu.
precisa saber é o seguinte
3

Também pode ser um Triggered Segues quebrado, verifique no seu storyboard, assim que você reconectar os segues ou executar, tudo funcionará novamente.

Verifique os Segues

Verifique se o IdentifierSegue está correto e semelhante ao seu código .

insira a descrição da imagem aqui

Contras Bulaquena
fonte
2

Corri para esse problema quando alterei o nome da variável que se conectava a um dos meus botões. Portanto, tenha isso em mente!

Sami
fonte
2

Eu sou novo no Xcode, por isso levei algumas horas para descobrir o problema para carregar o arquivo xls. Eu segui a maioria dos códigos de amostra lá em cima e nenhum deles resolve o erro Xcode mostrado.

A solução que encontrei foi que precisamos especificar o 'Adicionar aos destinos:' marque o projeto a ser adicionado, quando importamos o arquivo xls para o Xcode, arrastando e soltando em Projeto -> Arquivos de Suporte.

Mark Khor
fonte
1

pode haver mais de 1 IBAction para um botão no seu controlador de exibição, tente encontrá-los e remova todos os itens anteriores desse botão no seu controlador e crie um novo botão. Isso resolverá o seu problema.

Amit Verma
fonte
1

Verifique se você não está aplicando dinamicamente restrições relativas a uma exibição que ainda não existe na hierarquia da exibição.

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;

No exemplo acima, bottomView foi incluído na hierarquia de visualizações antes de aplicar restrições relativas.

Vipin
fonte
1

Eu recebi esse erro das 2 maneiras a seguir:

Eu estava recebendo esse erro quando empurrava para outro UIViewController.

No entanto, por engano, subclassifiquei a outra classe UITabBarControllere estava recebendo esse erro.

Como eu consertei isso? Subclassifiquei UIViewControllere não estava mais travando :)


Eu não queria usar o storyboard. Então eu apaguei. No entanto, esqueço de excluir sua referência nas configurações do projeto . Apenas cliquei no projeto >> Geral >> Informações de implantação >> e, em seguida, defino a Interface principal como espaço em branco. (Foi definido anteriormente como principal)

Como você pode ver nas duas situações, você está recebendo um erro ao acessar algum objeto que existe ...

Mel
fonte
1

Vou adicionar o meu problema à lista de soluções possíveis, caso alguém aconteça com este tópico.

Identificador de célula do TableView. Primeiro, verifique se o seu celular tem um identificador. Segundo, verifique se você está fazendo referência a esse identificador ao retirar a fila da célula.

Tempo de Orvalho
fonte
1

Swift 4 :

Eu estava recebendo esse erro devido a uma alteração na API do UIVisualEffectView. No Swift 3, não havia problema em fazer isso: myVisuallEffectView.addSubview(someSubview)

Mas no Swift 4 eu tive que mudar para isso: myVisualEffectView.contentView.addSubview(someSubview)

lonesomewhistle
fonte
1

Eu tive esse mesmo erro quando tive um erro de digitação para uma das visualizações ao criar restrições usando o formatador visual. Espero que ajude alguém ... ou eu novamente um dia.

budidino
fonte
0

No meu caso, o Xcode 8.2.1 , eu tinha uma Visualização do Kit de Mapa em um controlador de visualização. Então eu fui para

Criar fases> Vincular binário com bibliotecas

e acrescentou MapKit.framework, então estava tudo bem.

Eu acho que isso também se aplica a outras visões que requerem estrutura.

PS A execução no iOS 9 me disse que havia um problema no Map Kit View, enquanto no iOS 10 não me disse nada!

Protocole
fonte
0

Somente a solução "drop armageddon" funcionou para mim:

  • remover aplicativo do dispositivo
  • projeto limpo
  • executar nova instalação no dispositivo
Juan Fran Jimenez
fonte
0

No meu caso, o XCode estava cansado e falhou ao iniciar o aplicativo com esta mensagem, devido a uma falha na declaração (que foi definida pelo nosso código).

A execução em outro dispositivo mostrou a falha de afirmação, que pudemos corrigir, e tudo voltou ao normal.

Ege Akpinar
fonte
0

Para Swift 2.3

Isso parece ser um bug no Xcode 8 e no Swift 2.3, se você estiver conectando a ação do botão ao seu código via storyboard, verifique se o Xcode não renomeou a ação, para mim está adicionando um withSender: no final dos métodos , o que faço é ir para o meu código e renomear o método para corresponder ao que o Xcode escreveu.

Para qualquer outra versão, verifique a resposta correta.

Fernando Mata
fonte
0

No meu caso, era o InterfaceBuilder. Eu tinha copiado algumas visualizações de outro ViewController que atrapalhavam as restrições.

No InterfaceBuilder, tive o erro de seta vermelha no ViewController.

Durante a execução, o aplicativo travou.

Vincent
fonte
0

No meu caso, o aplicativo travou porque eu não defini a associação de destino do storyboard.

fredpi
fonte
0

No meu caso, o projeto Build Settingscontinha alguns diretórios inexistentes para Framework Search Pathse Library Search Paths.

Manuel
fonte
0

Eu tive dois problemas:

1) Meu alvo não tinha o controlador de exibição incluído que foi usado no arquivo de storyboard.

2) Meu storyboard tinha cerca de 3 anos, tive que recriar um dos controladores de exibição no controlador da barra de guias a partir do zero (ele só tinha um UITextField e ainda não sei por que não estava funcionando)

Genki
fonte
0

Ainda outra causa possível:

No meu caso, eu tinha um xibe estava ligando Bundle.main.loadNibNamed(...em que ponto estava travando. Todo o meu IBOutletse IBActionsparecia bem. No final, notei que o nibestava realmente carregando, mas quando tentei acessar a primeira (e única) visualização ( nib.first), isso não estava funcionando. Na verdade, nib.countestava retornando um número inteiro muito grande (max int?), Em vez do esperado 1. Tentei adicionar novamente a exibição, mas ainda não tive sorte.

No final, apaguei o xibarquivo inteiro e iniciei novamente (mas mantive algumas das visualizações na área de transferência para poder colá-las em vez de recriá-las novamente).

Isso funcionou!

Nikolay Suvandzhiev
fonte
0

Isso pode acontecer se você tiver uma tabela e esquecer de atribuir UITableViewDelegate e UITableViewDataSource à classe

user3561494
fonte