Estou recebendo este erro apenas no iOS 7 e o aplicativo travou. No iOS 6, nunca recebo nenhum erro, apenas uma vez de aviso de memória ao abrir a câmera.
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
Aqui está o que estou fazendo.
imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setAllowsEditing:YES];
[self presentModalViewController:imagePicker animated:YES];
Tentei atrasar o presentModalViewController
, mas continuo recebendo a mesma mensagem. Após alguns segundos (7-10), o aplicativo travou.
Este erro está presente apenas no iOS 7.
Alguém tem a pista?
Respostas:
O problema no iOS7 tem a ver com transições. Parece que se uma transição anterior não foi concluída e você lançou uma nova, o iOS7 bagunça as visualizações, onde o iOS6 parece gerenciá-la corretamente.
Você deve inicializar sua câmera no seu
UIViewController
, somente depois que a visualização for carregada e com um tempo limite:e aqui está o código de inicialização
fonte
Este erro também apareceu para mim com o projeto de exemplo de código PhotoPicker da Apple.
Eu estava usando o Xcode versão 5.0 e iOS 7.0.3 em um iPhone 4.
Passos para reproduzir:
Baixe o projeto de amostra PhotoPicker da Apple em https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html
Em APLViewController.m, comente a linha 125
//imagePickerController.showsCameraControls = NO;
Em APLViewController.m, comente as linhas 130-133
//[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
// self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
// imagePickerController.cameraOverlayView = self.overlayView;
// self.overlayView = nil;
Crie e inicie o aplicativo.
Depois de lançado, gire o dispositivo para o modo Paisagem.
Clique no ícone da câmera para abrir o UIImagePickerController no modo Câmera.
Veja a saída do console.
Saída do console
PhotoPicker [240: 60b] Tirar um instantâneo de uma vista que não foi renderizada resulta em um instantâneo vazio. Certifique-se de que sua visualização tenha sido renderizada pelo menos uma vez antes da captura instantânea ou captura instantânea após as atualizações da tela.
propriedade showsCameraControls
O problema ocorre para mim quando este tem um valor SIM (o padrão).
Definir como NÃO eliminou a mensagem.
Relatório de erro
Acabei de preencher um relatório de bug com a Apple.
Tentei muitas das sugestões que foram feitas em diferentes postagens, mas não encontrei uma solução alternativa satisfatória.
fonte
Tive o problema quando tentei apresentar a visão da câmera dentro de um popover. No iOS6 isso não foi problema, mas no iOS7 recebi a mensagem
também.
No entanto, depois de alterar a apresentação da visualização da câmera para tela inteira, conforme descrito em Tirar fotos e filmes, Biblioteca de desenvolvedores iOS, tudo correu bem novamente e a mensagem nunca mais apareceu. No entanto, tive que me certificar de que dependendo do modo em que o aplicativo está (ou seja, apresentando a visualização da câmera ou o rolo de fotos), teria que dispensar o popover ou o controlador de visualização sempre que o método
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker
fosse chamado.fonte
criar uma propriedade
Então
Isso deve resolver o problema
fonte
Usei este código para solucionar o problema:
fonte
Eu tenho o mesmo problema e encontrei uma solução. Acho que esse erro relacionado com a orientação do seu aplicativo. Meu aplicativo usa apenas o modo paisagem, mas UIImagePickerController usa o modo retrato. Eu adiciono o bloco try-catch ao main.m e obtenho uma exceção real:
Como eu resolvo esse problema:
1) Verifique novamente a orientação do dispositivo em Alvo-> Geral ou arquivo .plist: Orientações de interface suportadas: Paisagem à esquerda, Paisagem à direita.
2) Adicionar AppDelegate.m:
Após esta etapa, UIImagePickerController funciona corretamente, mas meus viewcontrollers podem ser girados para o modo retrato. Então, para resolver isso:
3) Crie uma categoria para UINavigationController, (supportedInterfaceOrientations movido de UIViewController para UINavigationController no iOS6):
Esta solução funciona corretamente no iOS 6.0, 6.1, 7.0. Espero que isto ajude.
fonte
Recebo este erro ao construir um aplicativo com iOS SDK 6.1, implantação de destino iOS 6.1 e execução de aplicativo no iOS 7 com iPhone. O aplicativo não trava, mas a implementação do
UIViewController shouldAutorotate
método me ajuda a remover a mensagem de erro.fonte
Eu tive o mesmo problema quando estava tentando modificar o aplicativo demo que vem com o Avirary SDK , no aplicativo demo, ele só pode editar a foto tirada do rolo da câmera. Para tentar editar a foto capturando da câmera, primeiro adicionei o seguinte código no arquivo UIViewcontroller.m:
Então, ao executar o aplicativo, ocorreu o erro:
Para resolver o erro, modifique o delegado UIImagePicker em seu arquivo UIViewContooler.m conforme mostrado abaixo:
Então o erro desapareceu e o app funciona!
fonte
Tente isso, use
e função
para substituir.
[self presentModalViewController:imagePicker animated:YES];
e de causa marcaimagePicker
como uma variável global.fonte
Isso é o que corrigiu para mim no meu aplicativo, ymmv
primeiro é um aplicativo para iPhone - iPad
em appname-Info.plist. nas orientações de interface suportadas (iPad) mostrou 4 orientações.
nas orientações da interface suportada mostrou 3 orientações. Eu adicionei o quarto e executei o aplicativo, sem saída de depuração.
Espero que isto ajude.
fonte
Acabei de encontrar o mesmo problema. No meu caso, o problema era que eu tinha algum código não ARC e migrei para o ARC. Quando fiz a migração, não tinha uma referência forte ao
UIImagePickerController
e esse foi o motivo do travamento.Espero que ajude :)
fonte
Eu tive o mesmo problema no iOS 8, mas o acesso à câmera estava desabilitado em Configurações -> Privacidade do meu aplicativo. Apenas habilitei e estava funcionando.
fonte
Passei muito tempo tentando encontrar a solução e, surpreendentemente, encontrei no final e foi muito engraçado quando descobri.
Aqui está o que você fará para recuperar a imagem que escolheu e retomar o trabalho :)
Sim, para resolver o problema, você só precisa dispensar o seletor normalmente, pois parece esta mensagem: "O instantâneo de uma visualização que não foi renderizada resulta em um instantâneo vazio. Certifique-se de que sua visualização tenha sido renderizada pelo menos uma vez antes de fazer o instantâneo ou após o instantâneo atualizações de tela. " impede que o seletor responda, mas você pode dispensá-lo e recuperar a imagem normalmente.
fonte
No meu caso foi relacionado a uma mudança de layout: o VC que apresenta o
UIImagePickerViewController
tem a barra de status oculta, mas oUIImagePickerViewController
não.Então, resolvi escondendo a barra de status no
UIImagePickerViewController
como é mostrado nesta resposta .fonte
Não respondendo diretamente à sua pergunta, mas você mencionou que tinha um aviso de memória, você pode estar armazenando a imagem bruta em uma propriedade que pode levar a um aviso de memória. Isso ocorre porque a imagem bruta ocupa aproximadamente 30 MB de memória. Notei um aviso de memória semelhante ao testar aplicativos no iOS6 que estavam na série iPhone 4. Ainda recebo este aviso quando os dispositivos foram atualizados para iOS7. Não há nenhum aviso de memória durante o teste no iPhone 5 da série no iOS7.
fonte
Mudando
para
corrigiu o problema para mim.
fonte