2016-03-25 13 views
5

Desidero leggere il file specificato (foto dal rullino fotografico) in modo asincrono, ma non funziona per me.Impossibile leggere il contenuto di PHA asincrono

variabile tempData ottiene nil fino posso cambiare config requestOptionForPhotos.synchronous-YES, allora tutto è ok, ma non voglio eseguire questo codice sincrono.

È possibile che sto bloccando l'accesso alla foto richiedendo lo stesso file in altro thread? Sono novizio nella programmazione di obiettivi-c e iOS e non so come funziona.

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

stai ottenendo un percorso file valido? inoltre, ci sono dei dati che stai ricevendo nell'oggetto "collezione"? –

+0

Sì, ci sono alcuni dati e il percorso è anche valido. – siwymilek

risposta

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

provare questo codice per ottenere asynchronusly immagine e mettere breakpoint sul risultato handdler per controllare il meteo si stanno ottenendo un'immagine o meno.

Problemi correlati