2015-12-14 6 views
1

Я получаю объект изображения таким образом, когда пользователь выбирает изображения из подборщика изображений.[library assetForURL: url resultBlock:^(ALAsset * asset) Не исполнять

-(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 всегда становится нулевым. Почему это. Пожалуйста, помогите мне. Благодаря

ответ

0

Как уже упоминалось в description для этого метода:

Обсуждение

Этот метод является асинхронным.

Это означает, что вы не можете вернуть данные так, как вы его закодировали. Вместо этого блок должен вызвать другой код, как только данные будут восстановлены.

+0

не могли бы вы объяснить это больше? – user1960169

+0

В чем разница между синхронными вызовами и асинхронными вызовами? – trojanfoe

Смежные вопросы