UiImageWriteToSavedPhotosalbum funcionando ... às vezes
-
26-09-2019 - |
Pergunta
O UIImageWriteToSAvedPhotosalbum está funcionando apenas às vezes. Às vezes funciona, às vezes não funciona, exatamente a mesma função.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
NSLog(@"Saving image to camera roll...");
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
NSLog(@"Done!"); }
Estou usando um controlador UiImagePicker para obter a imagem que chama essa função.
Às vezes, ele o salva para o rolo da câmera, outras vezes simplesmente não.
Alguém tem alguma ideia?
Desde já, obrigado.
Editar:
O método de conclusão para UiImageWriteToSavedPhotosalbum retorna algum tempo um erro de:
wait_fences: failed to receive reply: 10004003
Solução
Começaria adicionando um método de destino de conclusão ao salvar chamada para ver se está produzindo algum erro. Veja o UIImageWriteToSavedPhotosAlbum
documentação para detalhes.
Editar:
Uma das vezes que retornou ... Wait_Fences: Falha ao receber Resposta: 10004003
Isso significa que a operação tem o tempo limitado. Existem muitas causas disso:
- Memória baixa: coloque um login
didReceiveMemoryWarning
Para ver se essa é a causa. - Arquivos corruptos que o sistema não pode salvar. Se a imagem for gerada cada vez que poderá não sair da mesma vez.
- Erro completo do disco relatado incorretamente.
Eu acho (1) provavelmente e explica a natureza intermitente. Quando você tem memória suficiente, o método funciona e quando você não falha.
Além disso, quando você compilar, resolva quaisquer avisos que surgirem. Esses são apenas erros que não aparecem até o tempo de execução. Seu problema pode estar listado lá
Outras dicas
Espero que esta resposta não seja tarde demais para ser útil. Eu encontrei exatamente o mesmo problema. Acontece que o problema é duplo. Primeiro, a imagem precisa ser retida antes de ser enviada para UiImageWriteToSAVedPhotosalbum. Em segundo lugar, nos dispositivos pré-iphone4, essa função pode demorar um pouco para fazer suas coisas. A correção que encontrei foi implementar uma função de retorno de chamada. Veja a documentação para UiImageWriteToSAvedPhotosalbum sobre isso. A função deve estar no formato correto, você não pode simplesmente usar nenhuma função antiga. Nesta função, libere a imagem que você manteve ou você vazará memória. Você também pode usar isso para acompanhar quando as imagens terminarem. Aqui está o meu código básico abaixo:
-(void)processImage:(UIImage *)image {
[image retain];
UIImageWriteToSavedPhotosAlbum(reconstructedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}
- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
NSLog(@"SAVE IMAGE COMPLETE");
if(error != nil) {
NSLog(@"ERROR SAVING:%@",[error localizedDescription]);
}
[image autorelease];
}