[库assetForURL:url resultBlock:^(ALAsset *asset) 不执行
Posted
技术标签:
【中文标题】[库assetForURL:url resultBlock:^(ALAsset *asset) 不执行【英文标题】:[library assetForURL:url resultBlock:^(ALAsset *asset) Not execute 【发布时间】:2015-12-14 11:12:34 【问题描述】:当用户从图像选择器中选择图像时,我以这种方式获取图像资产。
-(NSMutableData *)GetImageAsset :(int)index
dm=[DataManager sharedManager];
NSURL *url=[dm.imgAssetsArr objectAtIndex:index];
__block NSMutableData *data;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:url resultBlock:^(ALAsset *asset)
if (asset)
ALAssetRepresentation *representation = [asset defaultRepresentation];
data = [NSMutableData data];
NSError *error;
long long bufferOffset = 0ll;
NSInteger bufferSize = 10000;
long long bytesRemaining = [representation size];
uint8_t buffer[bufferSize];
while (bytesRemaining > 0)
NSUInteger bytesRead = [representation getBytes:buffer fromOffset:bufferOffset length:bufferSize error:&error];
if (bytesRead == 0)
NSLog(@"error reading asset representation: %@", error);
return;
bytesRemaining -= bytesRead;
bufferOffset += bytesRead;
[data appendBytes:buffer length:bytesRead];
failureBlock:^(NSError *error)
NSLog(@"assetForURL error = %@", error);
];
return data;
但这永远不会进入块内。只需跳过该块并转到return
语句。所以我的data
总是为空。这是为什么。
请帮我。
谢谢
【问题讨论】:
【参考方案1】:正如description 中提到的那样:
讨论
此方法是异步的。
这意味着您无法以编码方式返回数据。取而代之的是,在检索到数据后让块调用其他代码。
【讨论】:
你能解释一下吗? 同步调用和异步调用有什么区别?以上是关于[库assetForURL:url resultBlock:^(ALAsset *asset) 不执行的主要内容,如果未能解决你的问题,请参考以下文章