9

Używam UIImagePickerController, aby umożliwić użytkownikowi wybranie zdjęcia lub wideo do udostępnienia w aplikacji. Gdy użytkownik wybierze element multimedialny w swojej bibliotece, to wykonanie tego kodu w jednej z metod UIImagePickerController's Delegat:PHAsset zwrócony z fetchAssetsWithALAssetURLs: zawsze jest zerowy przy wybieraniu zdjęcia z albumu "Mój strumień zdjęć" przy użyciu 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]; 
    } 
} 

Both if statements działa dobrze zarówno dla fotografii i wideo, z wyjątkiem gdy wybraniu elementu z albumu pod tytułem "My Photo Stream".

Po wybraniu pozycji z "My Photo Stream" zwracana PHAsset jest zawsze nil.

znalazłem następujące pytanie, które wydaje się mieć odpowiedź z roztworu roboczego: ALAssetsLibrary assetForURL: always returning nil for photos in "My Photo Stream" in iOS 8.1

ale powyższy link używa AssetsLibrary ramy, które nie jest już zalecany przez Apple:

„w iOS 8.0 i nowsze wersje, należy użyć architektury Photos zamiast biblioteki Assets Framework The Photos zapewnia więcej funkcji i zapewnia lepszą wydajność pracy z biblioteką zdjęć użytkownika.

Muszę być w stanie zwrócić PHAsset obiektów dla elementów multimedialnych w albumie "My Photo Stream". Obecnie referencyjny adres URL zwracany przez UIImagePickerController w słowniku info jest prawidłowym adresem URL, który loguje się w konsoli, ale podczas korzystania z tego adresu URL prawidłowy obiekt PHAsset nigdy nie jest zwracany.

Oto przykład adresu URL odniesienia, który jest zwracany w słowniku informacyjnym danej metody didFinishPickingMediaWithInfo: delegata:

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

Odpowiedz

1

Jest to błąd i wydaje się być rozwiązany w najnowszej wersji beta iOS 8.2x.

+0

Mogę potwierdzić, że na iOS 8.2 beta 5 to działa. – Kyle

+0

Mam tylko aktualizację do IOS 8.2, niestety nadal nie działa. – wgr

+0

nadal wydaje się być problemem nawet w wersji 8.4.1. – mahboudz

1

To niewiarygodne, ale jak iOS 10.3.3 bug utrzymuje i wygląda na to, że została ustalona przez iOS tylko 11 ...

W celu pokrycia iOS 10 i poniżej używam fetchAssets z PHAsset z słownik informacji zwrócony z didFinishPickingMediaWithInfo metoda delegata:

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

Pamiętaj, że to zwraca tablicę wyników.

+0

Czy Twój kod nie jest taki sam jak w oryginalnym pytaniu? – Theo

Powiązane problemy