6

我正在使用 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];
};

很高兴了解这一点。谢谢你的时间。

4

1 回答 1

21

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

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

__block UIImage* thumbImg = nil;
于 2011-04-28T21:46:41.893 回答