2017-06-28 4 views
2

を含むだけPHAssetCollectionsを取得し、私はこのようなすべての非空のアルバムをフェッチすることができますiOSのPhotoKitにおいて、少なくとも一つの写真

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetResourceType.photo.rawValue) 
let fetchResults = PHAsset.fetchAssets(in: collection, options: fetchOptions) 

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "estimatedAssetCount > 0") 
let albumFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: albumFetchOptions) 

albumFetchResult.enumerateObjects({ (collection, _, _) in 
    // Do something with the album... 
}) 

は、その後、私はこのようなアルバムから写真だけを取得することができます

しかし、最初の部分は私にビデオだけのアルバムを与えることができます。つまり、2番目の部分に述語を適用すると、アルバムは空になります。私はそれらを使用する前に、最初の部分でそれらのアルバムをフィルタリングする方法はありますか?

答えて

0

コレクション内のアイテムを取得しないと、このようにコレクションをフィルタリングできないようです。使用可能なフェッチオプションについては、the docsを参照してください。特定の種類のメディアの数によるフィルタリングは許可されません。

私がこれを達成する方法は、ユーザーによって作成されたすべてのアルバムを取得し、画像のみを返す述部でアルバムからアセットを取得することです。

だから、コードでそれを置くために:、

var userCollections: PHFetchResult<PHAssetCollection>! 
// Fetching all PHAssetCollections with at least some media in it 
let options = PHFetchOptions() 
    options.predicate = NSPredicate(format: "estimatedAssetCount > 0") 
// Performing the fetch 
userCollections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: options) 

次の述語を指定することで、画像のあるコレクションから資産を取得:

// Getting the specific collection (I assumed to use a tableView) 
let collection = userCollections[indexPath.row] 
let optionsToFilterImage = PHFetchOptions() 
    optionsToFilterImage.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue) 
// Fetching the asset with the predicate to filter just images 
let justImages = PHAsset.fetchAssets(in: collection, options: optionsToFilterImage) 

最後に、画像の数カウント:

if justImages.count > 0 { 
    // Display it 
} else { 
    // The album has no images 
} 
+0

私のためには機能しません:( –

+0

結果としてビデオだけが表示されますか?albumFetchResult定数はユーザーが作成したすべてのアルバムのコレクション...使用する必要のある単一のイメージを取得するPHImageManager ...達成しようとしていることをもう少し説明すれば私はあなたを助けようとします – Marco

+0

これをテストするには、私はビデオだけを含むアルバムを作成しました。私が達成しようとしているのは 'albumFetchResult'がそのようなアルバムを取り出し結果から除外することです。つまり少なくとも1枚の写真が含まれているアルバムのみが含まれます。アルバムをフェッチするときに '.albumRegular'をサブタイプとして使用すると、それを達成できません。 –

関連する問題