presentViewController: falha no iOS <6 (AutoLayout)


92

Este é um acidente estranho que estou recebendo. O travamento acontece quando eu pressiono um botão que vai para um determinado ViewController. A linha em que ele cai é:

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

O rastreamento da falha é:

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

NOTA: Isso falha no meu iPhone 4 iOS 5.1, mas não no meu iPhone 4S iOS 6 Beta 2


2
Tive o mesmo problema depois de atualizar para o Xcode 4.5 em execução e o aplicativo para iphone 5.1. Veja este link: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Sim, acho que estabelecemos isso :)
MCKapur

Respostas:


201

Eu acredito que este é um problema com o novo construtor de interface do Xcode. Por acaso você construiu seu .xib usando o construtor de interface do Xcode 4.5? Acabei de encontrar o mesmo problema e acho que esse é o problema. Meu aplicativo roda no iOS 6, mas não em nada mais antigo.

E você precisa ter certeza de desligar Use Auto Layoutseus xibs .

Isso pode ser feito por:

  1. Abra seu xib.
  2. Vá para a File Inspectorguia.
  3. Encontre a Interface Builder Documentseção na barra de ferramentas direita.
  4. Desmarque a Use Auto Layoutopção.

37
Sim, você precisa ter certeza de desligar "usar layout automático" para suas pontas.
Wevah

Sim, mesmo problema. O que fazer sobre isso? Devo testá-lo no Xcode 4.4 (essa pode ser a razão, por alguma estranha razão meu iPhone 4 iOS 5.1 pode rodar no Xcode 4.5 ... mesmo que não seja iOS 6)
MCKapur

16
Na visualização principal de seu xib, seção Documento do construtor de interface na barra de ferramentas direita.
Mark

Para qualquer pessoa interessada, criei um arquivo nib no Xcode 4.5 para um controlador de visualização antigo que configurava sua visualização programaticamente. Logo percebi que meu novo nib não funcionaria no iOS 5, então apaguei o arquivo nib e comecei a receber um erro semelhante, mesmo que o novo arquivo nib não estivesse mais no meu projeto! A solução foi renomear os arquivos .h e .m, ugh.
Keller

2
É um pouco preocupante o que está acontecendo com o controle de qualidade na Apple atualmente.
ardochhigh,

43

ScreenShot

Tive o mesmo problema quando baixei a nova atualização do XCode e do IOS6 SDK. Veja como eu resolvi:

Selecione o arquivo de construtor de interface (seja xib ou arquivo de storyboard) onde ocorre o erro. No editor assistente à direita no XCode, selecione a primeira aba da esquerda, e há uma caixa de seleção para a opção "Usar Autolayout" como na imagem acima. Desmarque a caixa de seleção.


4

Nagaraja pergunta "Como resolver o mesmo se não estivermos usando xib? Tive exatamente esse problema. Criei um controlador com um xib e então decidi remover o arquivo xib. A falha não foi embora. O problema era que eu precisava implementar

- (void) loadView

na minha classe de controlador. Depois de implementar este método, o problema foi resolvido.


1

Outra possível razão para um travamento com presentViewController é ter algo no bico conectado a uma variável que não está mais lá - a variável teve seu nome alterado ou foi excluída.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.