Pregunta

UIImageWriteToSavedPhotosAlbum sólo se trabaja a veces. A veces funciona, a veces no lo hace, exactamente la misma función.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
NSLog(@"Saving image to camera roll...");
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
NSLog(@"Done!"); }

Estoy utilizando un controlador UIImagePicker para obtener la imagen que luego llama a esa función.

A veces se guarda en el rollo de la cámara, otras veces simplemente no lo hace.

Alguien tiene alguna idea?

Gracias de antemano.

Editar:

El método de finalización de UIImageWriteToSavedPhotosAlbum vuelve en algún momento un error de:

wait_fences: failed to receive reply: 10004003
¿Fue útil?

Solución

Yo empezaría por la adición de un método objetivo de la finalización de la operación de almacenamiento llamada para ver si se produce algún error. Consulte la documentación UIImageWriteToSavedPhotosAlbum para más detalles.

Editar:

  

Una de las veces que se volvió ...   wait_fences: no recibir respuesta:   10004003

Esto significa que la operación ha agotado. Hay muchas causas de esto:

  1. Poca memoria:. Puso un tronco en didReceiveMemoryWarning para ver si esta es la causa
  2. archivos corruptos que el sistema no se puede salvar. Si se genera la imagen cada vez que es posible que no salga bien cada vez.
  3. disco incorrectamente el informe de error completo.

creo que (1) más probable y explica la naturaleza intermitente. Cuando se tiene suficiente memoria el método funciona y cuando no se produce un error.

Además, al compilar, resolver cualquier advertencia que se presentan. Esos son sólo errores que no se verán hasta el tiempo de ejecución. Usted es el problema podría estar en la lista no

Otros consejos

Espero que esta respuesta no es demasiado tarde para ser útil. Me encontré con exactamente el mismo problema. Pues resulta que el problema es doble. En primer lugar, la imagen no necesita ser retenido antes de ser enviada a UIImageWriteToSavedPhotosAlbum. En segundo lugar, en los dispositivos pre-iPhone4 esta función puede tomar un tiempo loooooong a hacer su cosa. La solución que encontré fue para implementar una función de devolución de llamada. Consulte la documentación de UIImageWriteToSavedPhotosAlbum sobre esto. La función debe estar en el formato correcto, no se puede simplemente usar cualquier función de edad. En esta función asegúrese de liberar la imagen que conserva o se va a perder memoria. También puede usar esto para no perder de vista cuando las imágenes se hacen ahorrar. Aquí está mi código básico a continuación:

    -(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];
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top