Я пытаюсь создать метод, который вернет мне ALAsset для данного URL-адреса актива. (Мне нужно загрузить актив позже, и я хочу сделать это вне блока результатов с результатом.)
+ (ALAsset*) assetForPhoto:(Photo*)photo
{
ALAssetsLibrary* library = [[[ALAssetsLibrary alloc] init] autorelease];
__block ALAsset* assetToReturn = nil;
NSURL* url = [NSURL URLWithString:photo.assetUrl];
NSLog(@"assetForPhoto: %@[", url);
[library assetForURL:url resultBlock:^(ALAsset *asset)
{
NSLog(@"asset: %@", asset);
assetToReturn = asset;
NSLog(@"asset: %@ %d", assetToReturn, [assetToReturn retainCount]);
} failureBlock:^(NSError *error)
{
assetToReturn = nil;
}];
NSLog(@"assetForPhoto: %@]", url);
NSLog(@"assetToReturn: %@", assetToReturn); // Invalid access exception coming here.
return assetToReturn;
}
Проблема в том, что assetToReturn дает EXC_BAD_ACCESS.
Есть ли какая-то проблема, если я попытаюсь назначить указатели внутри блока? Я видел несколько примеров блоков, но они всегда с простыми типами, такими как целые числа и т. д.
retainCount
в этом контексте бесполезен. - person bbum   schedule 03.10.2011