9

UIImagePickerController을 사용하여 사용자가 앱에서 공유 할 사진 또는 비디오를 선택할 수있게합니다. 당신이 앨범에서 항목을 선택하기위한 경우를 제외하고, 사진 및 비디오 모두PHAsset은 fetchAssetsWithALAssetURLs에서 반환 : 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]; 
    } 
} 

if statements 잘 동작 모두 : 사용자가 자신의 라이브러리에서 미디어 항목을 선택하면, 나는 UIImagePickerController's 위임 방법 중 하나에이 코드를 실행 "My Photo Stream"이라고 제목을 붙였다.

"My Photo Stream"에서 항목을 선택하면 PHAsset은 항상 nil입니다. ALAssetsLibrary assetForURL: always returning nil for photos in "My Photo Stream" in iOS 8.1

그러나 위의 링크가 더 이상 애플에서 권장하는 AssetsLibrary 프레임 워크를 사용합니다 :

"아이폰 OS에서를

나는 작업 솔루션으로 해답을 가지고 나타나는 다음과 같은 질문을 발견 8.0 이상에서는 Assets 라이브러리 프레임 워크 대신 Photos 프레임 워크를 사용하고 Photos 프레임 워크는 더 많은 기능을 제공하며 사용자의 사진 라이브러리 작업에 대해 더 나은 성능을 제공합니다.

"My Photo Stream" 앨범의 미디어 항목에 대해 PHAsset 개체를 반환 할 수 있어야합니다. 현재 info 사전에 UIImagePickerController에 의해 반환 된 참조 URL은 콘솔에 로그인하는 유효한 URL이지만이 URL을 사용하면 올바른 PHAsset 개체는 반환되지 않습니다. 그것은 버그 및 최신 아이폰 OS 8.2 베타 버전에서 수정 될 것으로 보인다

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

답변

1

: 여기

didFinishPickingMediaWithInfo: 대리자 메서드의 정보를 사전에 반환되는 참조 URL의 예입니다.

+0

iOS 8.2 베타 5에서 이것이 작동하는지 확인할 수 있습니다. – Kyle

+0

IOS 8.2로 업데이트되었지만 불행히도 여전히 작동하지 않습니다. – wgr

+0

은 8.4.1에서도 여전히 문제가있는 것으로 보입니다. – mahboudz

1

그것은 믿을 수 있지만, 아이폰 OS 10.3.3의로

아이폰 OS (10) 충당하기 위해 아래 내가 함께 PHAssetfetchAssets을 사용하고 있습니다 ... 버그가 계속하고 iOS 만 (11)에 의해 고정 된 것 같습니다 didFinishPickingMediaWithInfo에서 반환 된 정보 사전 대리자 메서드 :

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

결과 배열이 반환됩니다.

+0

코드가 원래 질문과 동일하지 않습니까? – Theo