Chamando popToRootViewControllerAnimated após acabamento UIImagePicker ou cancelar? (IPhone, Objective C)

votos
2

Eu estou tentando implementar a funcionalidade de câmera ao vivo no meu aplicativo iPhone e estou correndo em problemas. Basicamente, a forma como é estruturado é a seguinte: I proporcionar um UINavigationController em que o utilizador pode navegar para uma imagem com uma vista de tabela e (mediante a escolha de uma) uma vista em detalhe.

Eles podem, em seguida, clicar em um botão e tirar uma nova foto com a câmera. Idealmente, o que deve acontecer é que, depois de tirar a foto ou cancelar eles vão voltar para a raiz de navegação onde as imagens são listados novamente. Por isso, estou implementando o delegado UIImagePickerController dentro do meu principal controlador de vista de detalhe.

Tudo isso é implementado bem, exceto que duram pouco - eu posso acessar a foto, etc., mas ao tentar retornar a essa primeira listagem - usando popToRootViewControllerAnimated - eu recebo um EXC_BAD_ACCESSerro. Aqui é uma versão reduzida do código relevante ( didFinishPickingMediaWithInfo... imagePickerControllerDidCancelfunciona da mesma forma):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Do some image processing stuff here...

    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self.navigationController popToRootViewControllerAnimated:YES];    
}

Comentando essa última linha faz o trabalho, mas então ele só vai voltar para a vista de detalhe com a foto original, não a listagem.

Alguém?

Atualização : Um detalhe I esqueceu de mencionar antes ... O pop, de fato, aparecem para trabalhar em um grau. O selecionador de câmera é demitido e ele vai voltar para a listagem. No entanto, é quando o aplicativo morre (a célula da tabela selecionada é ainda azul, de onde o usuário aproveitado antes). Eu também tentei usar popViewControllerAnimatedvez com o mesmo resultado.

Publicado 19/08/2009 em 11:01
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

Espero que este não é tarde demais para você. Eu corri para o mesmo problema hoje à noite e bati com a cabeça no meu MBP por cerca de 30 minutos antes de eu comecei a ficar um pouco criativo.

Eu encontrei duas maneiras de fazer este trabalho. Nem é intuitivo, mas aqui você vai. Basicamente, parece que o problema pode ser causado pelo fato de que você está chamando de "pop" na navigationController antes a "demitir" animação tenha terminado.

Descobri que se eu definir o boolean animação na demitir para "NÃO", então ele trabalhou.

Por exemplo

[picker dismissModalViewControllerAnimated:**NO**];

Outra opção é criar uma segunda método que realmente chama a função "pop", e chamá-lo usando um timer com um pequeno desvio. Apenas o suficiente para a animação descartar a correr.

Por exemplo

-(void)popMe {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self performSelector:@selector(popMe) withObject:nil afterDelay:0.1];   
}

Que o timing funcionou para mim, você pode ter que ajustar.

Espero que ajude!

  • Andrew
Respondeu 01/10/2009 em 02:13
fonte usuário

votos
1

A resposta:
Use esta: [self.navigationController dismissModalViewControllerAnimated: YES]; código em vez de [selecionador dismissModalViewControllerAnimated: YES];
Agora, você pode remover esta linha do seu código: [self.navigationController popToRootViewControllerAnimated: YES];

Respondeu 19/08/2009 em 17:06
fonte usuário

votos
1

Você problema aqui é [dismissModelViewController selecionador] e [liberação selecionador] eu acredito ... Você não precisa liberar o selecionador, é releasedd para u quando u demitir o controlador de vista modal eu acredito (que você não esteja fazendo corretamente do que eu pode s ee) ... ou isso, ou ele tem uma contagem de referência de 0 e não deve ser libertar, de qualquer forma eu me lembro de fazer algo parecido com isso e tê-lo falhar, porque eu lançou o selecionador ... Também eu notei que você está tendo o picker demitir o controlador de vista modal, tem certeza que é isso que você está tentando fazer? não [auto dismissModalViewController] ou que nunca ViewController você empurrou que vista para?

Respondeu 19/08/2009 em 16:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more