9

Sto utilizzando uno UIImagePickerController per consentire all'utente di scegliere una foto o un video da condividere nell'app. Quando l'utente sceglie un elemento multimediale nella loro biblioteca, eseguo questo codice in uno dei metodi UIImagePickerController's delegato:PHAsset restituito da fetchAssetsWithALAssetURLs: è sempre nullo quando si sceglie una foto dall'album "My Photo Stream" utilizzando UIImagePickerController

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

PHAsset *asset; 
if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.movie"]) { 
    // Video 
    asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject]; 

} else if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.image"]) { 
    // Photo 
    PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil]; 
    asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject]; 
    } 
} 

Sia if statements funzionano bene sia per foto e video, ad eccezione di quando si seleziona un elemento dall'album intitolato "My Photo Stream".

Quando si seleziona un articolo da "My Photo Stream", il numero PHAsset restituito è sempre nil.

ho trovato la seguente domanda che sembra avere una risposta con una soluzione di lavoro: ALAssetsLibrary assetForURL: always returning nil for photos in "My Photo Stream" in iOS 8.1

Ma il link qui sopra utilizza il framework AssetsLibrary che non è più consigliato da Apple:

"In iOS 8.0 e versioni successive, utilizzare il framework Photos al posto del framework delle risorse . Il framework Photos fornisce più funzionalità e prestazioni migliori per lavorare con la libreria di foto di un utente. Vedere le foto Riferimento quadro. "

Devo essere in grado di restituire gli oggetti PHAsset per gli elementi multimediali nell'album "My Photo Stream". In questo momento l'URL di riferimento restituito da UIImagePickerController nel dizionario info è un URL valido che accede alla console, ma quando si utilizza questo URL, un oggetto valido PHAsset non viene mai restituito.

Ecco un esempio di un URL di riferimento che viene restituito nel dizionario informazioni del metodo di didFinishPickingMediaWithInfo: delegato:

assets-library://asset/asset.JPG?id=DCF5C6E5-B4F4-4E61-9C4B-CC63E104BF2B&ext=JPG 

risposta

1

Si tratta di un bug e sembra essere fissato negli ultimi iOS 8.2x beta.

+0

Posso confermare che su iOS 8.2 beta 5 funziona. – Kyle

+0

Ho appena aggiornato a iOS 8.2, purtroppo ancora non funziona. – wgr

+0

sembra ancora essere un problema anche con 8.4.1. – mahboudz

1

E 'incredibile, ma come di iOS 10.3.3 bug persiste e sembra che è stato fissato dal solo iOS 11 ...

Al fine di coprire iOS 10 e al di sotto sto usando fetchAssets di PHAsset con Dizionario informazioni restituito dal metodo didFinishPickingMediaWithInfo delegato:

PHAsset.fetchAssets(withALAssetURLs: [info["UIImagePickerControllerReferenceURL"] as! URL], options: nil) 

ricordare che questo restituisce un array di risultati.

+0

Il tuo codice non è lo stesso della domanda originale? – Theo