2016-03-25 5 views
5

指定されたファイル(カメラロールからの写真)を非同期に読み込みたいのですが、私にとってはうまくいきません。PHAssetの内容を非同期で読み取ることができません

変数tempDatanilは、それまでは私がYESに設定requestOptionForPhotos.synchronousを変更取得し、すべてがOKですが、私はこのコードの同期を実行する必要はありません。

他のスレッドで同じファイルをリクエストして写真へのアクセスをブロックしている可能性はありますか?私は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; 
    }]; 
    } 
+0

有効なファイルパスを取得していますか?また、 "コレクション"オブジェクトに入っているデータはありますか? –

+0

はい、いくつかのデータとパスも有効です。 – siwymilek

答えて

0
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; 
      }]; 
     } 
    }); 

asynchronusly画像を取得し、あなたがイメージを取得したりしていない天気予報をチェックした結果handdlerにブレークポイントを置くために、このコードを試してみてください。

関連する問題