AVAssetImageGeneratorCompletionHandler - 如何设置或返回变量?

gef*_*rce 6 instance-variables uiimage avassetwriter

我正在使用AVAssetImageGenerator从动画片段中获取图像而不播放它.现在我有一个问题如何在处理程序的循环中设置变量?可能吗?我收到此错误消息,不知道这是什么意思.(谷歌>没有结果).

"变量不可分配(缺少__block类型说明符)"

所以我必须在这里问专业人士.这是代码.我想保存或返回我生成的imageData,所以我可以删除该后续处理程序中的"setImage"消息.

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];
};
Run Code Online (Sandbox Code Playgroud)

了解这一点会很棒.谢谢你的时间.

Vla*_*mir 21

首先,似乎你不需要初始化你的thumbImg,当它在该行中创建的声明的UIImage对象将被覆盖并将泄漏.只需使用nil值初始化它.

您的代码中的实际问题是您要在块中更改的变量应使用__block说明符声明(如错误消息所示).所以你的1s线应该是

__block UIImage* thumbImg = nil;
Run Code Online (Sandbox Code Playgroud)