2017-10-26 1 views
0

UITable에 표시하기 위해 필터링 된 SmartAlbum 모음을 만들어야합니다. 필자는 필터링되지 않은 콜렉션을 변경 가능한 형식으로 캐스팅하고 제외하려는 것들을 삭제 한 다음 PHFetchResult로 다시 캐스팅하는 다양한 방법을 시도해 보았습니다. 그 모든 시도는 실패했습니다.앨범의 필터링 된 PHAssetCollection 만들기 실패

이제 PHFetch 옵션을 사용하여 구체적으로 허용되는 "localizedTitle"키가있는 앨범을 필터링하려고합니다 (https://developer.apple.com/documentation/photos/phfetchoptions). 그러나 "Videos"스마트 폴더를 제외하려는 다음 테스트 사례 코드를 시도 할 때 newAlbums의 결과가 0입니다. 또한 술어를 % K == % @로 설정할 때 제로 결과를 얻습니다. 정답은 전자의 경우 15이고 후자의 경우 1이어야합니다. 내 술어가 적절한 결과를 선택하지 않는 이유는 무엇입니까? 새로운 콜렉션을 라이브러리에 다시 저장하지 않고 임시 디스플레이로 사용하고 싶습니다. 요청 호출을 시도하지 않았습니다. (프레임 워크를 오해 할 수도 있습니다.)

S/O 및 개발자를 검색했습니다. .apple 및 작업 코드의 유일한 예는 개별 미디어 (사진 또는 비디오)를 필터링하는 것이지 스마트 앨범을 선택하는 것이 아닙니다.

let fetchOptions = PHFetchOptions() 
    let p1 = NSPredicate(format: "%K == %@", "localizedTitle", "Videos") 
    fetchOptions.predicate = p1 
    let newAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: fetchOptions) 
+0

사람은 과도 컬렉션 사용하고있다 이런 종류의 결과를 얻으려면? 정규 결과 콜렉션과 같이 일시적인 콜렉션이 불변 인 경우, 필자가 원하는 콜렉션을 빌드하는 방법을 알지 못한다. – BlueskyMed

답변

0

여기에 제가 확인한 접근 방법이 있습니다. 마이클에게 많은 감사를드립니다 https://stackoverflow.com/a/46145638/4945371

먼저 PHCollectionList가 아니라 배열을 반환하는이 작은 메서드를 추가하십시오!

private func fetchSmartCollections(with: PHAssetCollectionType, subtypes: [PHAssetCollectionSubtype]) -> [PHAssetCollection] { 
    var collections:[PHAssetCollection] = [] 
    let options = PHFetchOptions() 
    options.includeHiddenAssets = false 

    for subtype in subtypes { 
     if let collection = PHAssetCollection.fetchAssetCollections(with: with, subtype: subtype, options: options).firstObject { 
      collections.append(collection) 
     } 
    } 
    return collections 
} 

그런 다음 원하는 스마트 앨범의 배열을 만들 : 마지막으로

let subtypes:[PHAssetCollectionSubtype] = [ 
     .smartAlbumFavorites, 
     .smartAlbumLongExposures, 
     .smartAlbumSelfPortraits, 
     .smartAlbumRecentlyAdded 
     // .smartAlbumUserLibrary, 
     // .smartAlbumPanoramas, 
     // .smartAlbumLivePhotos, 
     // .smartAlbumBursts, 
     // .smartAlbumDepthEffect, 
     // .smartAlbumScreenshots, 
    ] 

을 대신 일부 변형

 smartAlbumsArray = fetchSmartCollections(with: .smartAlbum, subtypes: subtypes) 

:

smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: smartAlbumOptions) 
관련 문제