使用 PHFetchOptions.predicate 从 PHAssetCollection 获取 PHAsset 的问题
Posted
技术标签:
【中文标题】使用 PHFetchOptions.predicate 从 PHAssetCollection 获取 PHAsset 的问题【英文标题】:issue fetching PHAssets from PHAssetCollection using PHFetchOptions.predicate 【发布时间】:2015-09-08 20:44:12 【问题描述】:我试图仅从 PHAssetCollection 获取图像,但我没有看到谓词影响结果。 我正在将 PHFetchOptions 设置为 mediaType == Image 但是当我从库中选择一个视频时,它会传递谓词并且 println 也会确认该类型。
不知道为什么会这样,我可能在这里遗漏了什么问题?
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType == %d", argumentArray: [PHAssetMediaType.Image.rawValue])
println(fetchOptions) // mediaType == 1
let assetsFetch = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: fetchOptions)
assetsFetch.enumerateObjectsUsingBlock (obj:AnyObject!, idx:Int, stop:UnsafeMutablePointer<ObjCBool>) -> Void in
if let asset = obj as? PHAsset
println(asset)
//prints: <PHAsset: 0x1703a1f80> A45796D5-528F-4D5E-A8D8-5F3F47CF40A1/L0/001 mediaType=2/0, assetSource=3, (1920x1080), creationDate=2014-11-11 16:34:12 +0000, location=1, hidden=0, favorite=0
【问题讨论】:
【参考方案1】:您的抓取和选项看起来不错。 PHAssetCollection
是用transientAssetCollectionWithAssets:title:
或transientAssetCollectionWithAssetFetchResult:title
创建的吗?
如果是这样,那么这些选项基本上会被忽略。
【讨论】:
【参考方案2】:这是一个可以完成这项工作的选项:
func convertFetchResultToPhotosArray(assetsFetch: PHFetchResult<PHAsset>) -> [PHAsset]
var photos = [PHAsset]()
for i in 0 ..< assetsFetch.count
let asset = assetsFetch[i]
if asset.mediaType == .image photos.append(asset)
return photos
...然后将您的 assetsFetch
传递给此函数
【讨论】:
以上是关于使用 PHFetchOptions.predicate 从 PHAssetCollection 获取 PHAsset 的问题的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)