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

时间:2011-04-28 21:36:22

标签: uiimage instance-variables 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];
};

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

1 个答案:

答案 0 :(得分:21)

首先,似乎你不需要初始化你的thumbImg,当它在该行中创建的声明的UIImage对象将在块中被覆盖并且会泄漏。只需用零值启动它。

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

__block UIImage* thumbImg = nil;