【问题标题】:issue fetching PHAssets from PHAssetCollection using PHFetchOptions.predicate使用 PHFetchOptions.predicate 从 PHAssetCollection 获取 PHAsset 的问题
【发布时间】: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 

            }
        }

【问题讨论】:

    标签: ios swift photosframework


    【解决方案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 传递给此函数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 2019-02-13
        • 2020-04-11
        • 2015-12-17
        • 1970-01-01
        • 2016-06-09
        相关资源
        最近更新 更多