无法异步读取PHAsset内容

siw*_*lek 5 objective-c ios

我想要异步读取指定文件(来自相机胶卷的照片),但它对我不起作用.

tempDatanil,直到我改变配置requestOptionForPhotos.synchronousYES,然后一切都很好,但我不希望执行该代码同步.

是否有可能通过在其他线程中请求相同的文件来阻止对照片的访问?我是objective-c和iOS编程的新手,我不知道它是如何工作的.

  NSURL *assetUrl = [[NSURL alloc] initWithString:filepath];
  PHFetchResult *collection = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:assetUrl] options:nil];

  PHImageRequestOptions *requestOptionForPhotos = [[PHImageRequestOptions alloc] init];
  requestOptionForPhotos.networkAccessAllowed = YES;
  requestOptionForPhotos.synchronous = NO;

  __block BOOL isFinished = NO;
  __block NSData * tempData = nil;

  for(PHAsset *asset in collection) {
    [[PHImageManager defaultManager]
     requestImageForAsset:asset
     targetSize:CGSizeMake(80, 80)
     contentMode:PHImageContentModeAspectFill
     options:requestOptionForPhotos
     resultHandler:^(UIImage *result, NSDictionary *info) {
       tempData = UIImagePNGRepresentation(result);
       isFinished = YES;
     }];
  }
Run Code Online (Sandbox Code Playgroud)

Nir*_*gly 1

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_async(queue, ^{
         NSURL *assetUrl = [[NSURL alloc] initWithString:filepath];
         PHFetchResult *collection = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:assetUrl] options:nil];
         PHImageRequestOptions *requestOptionForPhotos = [[PHImageRequestOptions alloc] init];
         requestOptionForPhotos.networkAccessAllowed = YES;
         requestOptionForPhotos.synchronous = NO;

        __block BOOL isFinished = NO;
        __block NSData * tempData = nil;

       for (PHAsset *asset in collection) {
           [[PHImageManager defaultManager] 
                      requestImageForAsset:asset
                      targetSize:CGSizeMake(80, 80)
                      contentMode:PHImageContentModeAspectFill
                      options:requestOptionForPhotos
                      resultHandler:^(UIImage *result, NSDictionary *info) {
                           tempData = UIImagePNGRepresentation(result);
                           isFinished = YES;
           }];
       }
    });
Run Code Online (Sandbox Code Playgroud)

尝试此代码来获取异步图像,并在结果处理程序上放置断点以检查您是否正在获取图像。