/ / PHAsset sa vrátil zfetchAssetsWithALAssetURLs: je vždy nulová pri výbere fotografie z albumu „My Photo Stream“ pomocou nástroja UIImagePickerController - ios8, uiimagepickercontroller, alassetslibrary, phasset, photosframework

PHAsset sa vrátil z fetchAssetsWithALAssetURLs: je vždy nulový pri výbere fotografie z albumu "My Photo Stream" pomocou UIImagePickerController - ios8, uiimagepickercontroller, alassetslibrary, phasset, photosframework

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ď č. 1

Je 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.