2011-04-28 6 views
6

estoy usando el AVAssetImageGenerator para obtener imágenes de un clip de película sin reproducirlo antes. Ahora tengo una pregunta sobre cómo configurar variables en el ciclo de un controlador. ¿Es posible? Recibo este mensaje de error y no tengo idea de qué significa eso. (google> sin resultados).AVAssetImageGeneratorCompletionHandler: cómo establecer o devolver variables?

"variable no es asignable (falta __block especificador de tipo)"

así que tengo que pedir a los pro's aquí. Aquí está el código. Quiero guardar o devolver mis imageData generados, por lo que puedo eliminar el mensaje "setImage" dentro de ese siguiente controlador.

UIImage* thumbImg = [[UIImage alloc] init]; 

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) 
{ 
    if (result != AVAssetImageGeneratorSucceeded) 
    { 
     NSLog(@"couldn't generate thumbnail, error:%@", error); 
    } 
    [button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal]; 
    thumbImg = [[UIImage imageWithCGImage:im] retain]; 
    [generator release]; 
}; 

Sería genial aprender sobre eso. Gracias por su tiempo.

Respuesta

21

En primer lugar, parece que no necesita iniciar su thumbImg cuando su objeto UIImage declarado creado en esa línea se sobrescribirá en bloque y tendrá fugas. Simplemente inicie con valor nulo.

El problema real en su código es que la variable que va a cambiar en el bloque debe declararse con __block specifier (como indica el mensaje de error). Por lo que su línea de 1s debe ser

__block UIImage* thumbImg = nil; 
+0

fresca, gracias por eso! Que tengas un buen día. – geforce

+0

De nada :) – Vladimir

+0

gracias por su gran respuesta! ¿puedo saber cuál es el efecto de __block en este caso? Recuerdo que tiene algo que ver con la retención de memoria. – Zhen

Cuestiones relacionadas