O PHAsset retornado de fetchAssetsWithALAssetURLs: é sempre nulo ao escolher uma foto do álbum "My Photo Stream" usando UIImagePickerController

9

Estou usando o UIImagePickerController para permitir que o usuário escolha uma foto ou um vídeo para compartilhar no aplicativo. Quando o usuário escolhe um item de mídia em sua biblioteca, eu executo esse código em um dos métodos UIImagePickerController's delegate:

- (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];  
   }
}

O if statements funciona bem tanto para foto quanto para vídeo, exceto quando você seleciona um item do álbum intitulado "My Photo Stream" .

Quando você seleciona um item de "My Photo Stream" , o PHAsset retornado é sempre nil .

Encontrei a seguinte pergunta que parece ter uma resposta com uma solução de trabalho: ALAssetsLibrary assetForURL: sempre retornando nil para fotos em" My Photo Stream "no iOS 8.1

Mas o link acima usa a estrutura AssetsLibrary , que não é mais recomendada pela Apple:

  

"No iOS 8.0 e posterior, use a estrutura Fotos em vez dos Recursos   Estrutura de biblioteca. O quadro Fotos fornece mais recursos e   melhor desempenho para trabalhar com a biblioteca de fotos de um usuário. Ver fotos   Referência do Framework. "

Eu preciso poder retornar PHAsset objetos para os itens de mídia no álbum "My Photo Stream" . No momento, o URL de referência retornado pelo UIImagePickerController no dicionário info é um URL válido que faz o login no console, mas ao usar esse URL, um objeto PHAsset válido nunca é retornado.

Aqui está um exemplo de um URL de referência que é retornado no dicionário de informações do método didFinishPickingMediaWithInfo: delegate:

assets-library://asset/asset.JPG?id=DCF5C6E5-B4F4-4E61-9C4B-CC63E104BF2B&ext=JPG
    
por user3344977 16.12.2014 в 04:07
fonte

2 respostas

1

É um bug e parece estar corrigido nos últimos betas do iOS 8.2x.

    
por holtmann 13.02.2015 / 13:27
fonte
1

É inacreditável, mas a partir do iOS 10.3.3 o bug persiste e parece que foi corrigido apenas pelo iOS 11 ...

Para cobrir o iOS 10 e abaixo, estou usando fetchAssets de PHAsset com o dicionário de informações retornado do método didFinishPickingMediaWithInfo delegate:

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

Lembre-se de que isso retorna uma matriz de resultados.

    
por scaryguy 23.10.2017 / 16:47
fonte