Používam a UIImagePickerController
aby používateľ mohol vybrať fotografiu alebo video, ktoré bude zdieľať v aplikácii. Keď používateľ vyberie mediálnu položku vo svojej knižnici, spustím tento kód v jednej z knižníc UIImagePickerController"s
metódy delegovania:
- (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];
}
}
oba if statements
funguje dobre pre fotografiu aj pre video, okrem prípadu, keď vyberiete položku z albumu s názvom "My Photo Stream"
.
Ak vyberiete položku z "My Photo Stream"
, vrátil PHAsset
je vždy nil
.
Našiel som nasledujúcu otázku, ktorá sa zdá byť odpoveďou na pracovné riešenie: ALAssetsLibrary assetForURL: vždy sa vracia nula pre fotografie v časti „My Photo Stream“ v systéme iOS 8.1
Ale vyššie uvedený odkaz používa AssetsLibrary
rámec, ktorý spoločnosť Apple už neodporúča:
„V systéme iOS 8.0 a novšie, použite rámček Fotografie namiesto diel Rámec knižnice. Rámec Fotografie poskytuje viac funkcií a lepší výkon pri práci s knižnicou fotografií používateľa. Pozri Fotografie Odkaz na rámec. ““
Musím mať možnosť sa vrátiť PHAsset
predmety pre mediálne položky v "My Photo Stream"
album. Práve teraz referenčná adresa URL, ktorú vrátil server UIImagePickerController
v info
slovník je platná adresa URL, ktorá sa prihlasuje v konzole, ale pri použití tejto adresy URL je platná PHAsset
objekt sa nikdy nevráti.
Tu je príklad referenčnej adresy URL, ktorá sa vracia v systéme didFinishPickingMediaWithInfo:
informačný slovník pre delegovanú metódu:
assets-library://asset/asset.JPG?id=DCF5C6E5-B4F4-4E61-9C4B-CC63E104BF2B&ext=JPG
odpovede:
1 pre odpoveď č. 1Je to chyba a zdá sa, že je opravená v najnovších beta verziách pre iOS 8.2x.
1 pre odpoveď č. 2
Je to neuveriteľné, ale od iOS 10.3.3 chyba pretrváva a vyzerá to, že bola opravená iba iOS 11 ...
Na pokrytie iOS 10 a menej používam fetchAssets
z PHAsset
s informačným slovníkom vráteným z didFinishPickingMediaWithInfo
metóda delegovania:
PHAsset.fetchAssets(withALAssetURLs: [info["UIImagePickerControllerReferenceURL"] as! URL], options: nil)
Nezabudnite, že to vráti celý rad výsledkov.