[库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) 不执行的主要内容,如果未能解决你的问题,请参考以下文章

将照片保存到自定义库

Ajax嵌套Ajax的模版

对象键的异步/等待分配:它是并发的吗?

oracle的表更新问题

静态库与动态库注入

iOS 动态库+静态库