[library assetForURL:url resultBlock:^(ALAsset * asset)不执行

时间:2015-12-14 11:12:35

标签: ios alassetlibrary

当用户从图像选择器中选择图像时,我以这种方式获取图像资源。

-(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 个答案:

答案 0 :(得分:0)

正如description中提到的那种方法:

  

<强>讨论

     

此方法是异步的。

这意味着您无法以编码方式返回数据。而是在检索到数据后让块调用其他代码。