AVAssetImageGeneratorCompletionHandler - как установить или вернуть переменные? - PullRequest
6 голосов
/ 29 апреля 2011

Я использую AVAssetImageGenerator, чтобы получать изображения из видеоклипа, не воспроизводя его раньше. Теперь у меня есть вопрос, как установить переменные в цикле обработчика? Является ли это возможным? Я получаю это сообщение об ошибке и понятия не имею, что это значит. (Google> нет результатов).

"Переменная не присваивается (отсутствует __блокатор типа) "

Так что я должен спросить профи здесь. Вот код Я хочу сохранить или вернуть сгенерированные данные 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 Ответ

21 голосов
/ 29 апреля 2011

Во-первых, кажется, что вам не нужно инициировать свой thumbImg, когда он объявлен - объект UIImage, созданный в этой строке, будет перезаписан в блоке и утечет. Просто запустите его с нулевым значением.

Фактическая проблема в вашем коде заключается в том, что переменная, которую вы собираетесь изменить в блоке, должна быть объявлена ​​со спецификатором __block (как говорится в сообщении об ошибке). Таким образом, ваша строка 1s должна быть

__block UIImage* thumbImg = nil;
...