Ich verwende UIImagePickerController
, damit der Nutzer ein Foto oder Video für die Freigabe in der App auswählen kann. Wenn der Benutzer ein Medienelement in seiner Bibliothek auswählt, führe ich diesen Code in einer der UIImagePickerController's
-Delegatenmethoden aus:
Beide if statements
funktionieren sowohl für Foto als auch für Video einwandfrei, außer wenn Sie ein Element aus dem Album "My Photo Stream"
auswählen.
Wenn Sie ein Objekt aus "My Photo Stream"
auswählen, ist das zurückgegebene PHAsset
immer nil
.
Ich habe die folgende Frage gefunden, die eine Antwort mit einer funktionierenden Lösung zu haben scheint: ALAssetsLibrary assetForURL: gibt immer nil für Fotos in" Mein Fotostream "in iOS 8.1
zurück Aber der obige Link verwendet das AssetsLibrary
-Framework, das von Apple nicht mehr empfohlen wird:
"Verwenden Sie in iOS 8.0 und höher das Photos-Framework anstelle der Assets Bibliotheks-Framework Das Photos-Framework bietet mehr Funktionen und bessere Leistung für die Arbeit mit der Fotobibliothek eines Benutzers. Siehe Fotos Framework-Referenz. "
Ich muss PHAsset
-Objekte für die Medienelemente im Album "My Photo Stream"
zurückgeben können. Derzeit ist die Referenz-URL, die von UIImagePickerController
im info
-Wörterbuch zurückgegeben wird, eine gültige URL, die sich in der Konsole anmeldet, aber bei Verwendung dieser URL wird niemals ein gültiges PHAsset
-Objekt zurückgegeben.
Hier ist ein Beispiel für eine Referenz-URL, die im Infowörterbuch der didFinishPickingMediaWithInfo:
-Delegatenmethode zurückgegeben wird:
Es ist unglaublich, aber ab iOS 10.3.3 bleibt der Fehler bestehen und es sieht so aus, als ob er nur von iOS 11 behoben wurde ...
Um iOS 10 und darunter abzudecken, verwende ich fetchAssets
von PHAsset
mit dem von didFinishPickingMediaWithInfo
delegate method:
Denken Sie daran, dass dies ein Array von Ergebnissen zurückgibt.
Tags und Links alassetslibrary ios8 uiimagepickercontroller phasset photosframework