如果类型设置为专辑,PHAssetCollection fetchAssetCollectionsContainingAsset 返回 nil

Posted

技术标签:

【中文标题】如果类型设置为专辑,PHAssetCollection fetchAssetCollectionsContainingAsset 返回 nil【英文标题】:PHAssetCollection fetchAssetCollectionsContainingAsset return nil if type set to Album 【发布时间】:2015-09-02 15:31:47 【问题描述】:

我正在尝试通过 Asset 访问 AssetCollection。执行代码时,照片框架返回 nil。仅供参考:资产是用 iPhone 相机点击的图片,因此它存储在相机胶卷下。

77AF0C78-242A-4979-8A7B-7CFF04014C54/L0/001 致命错误:在展开可选值时意外发现 nil

func assetCollectionForAsset(asset: PHAsset) -> PHCollection 
    var assetCollection: PHAssetCollection!

    print(asset.localIdentifier)

    let fetchOptions = PHFetchOptions()
    let collection = PHAssetCollection.fetchAssetCollectionsContainingAsset(asset, withType: PHAssetCollectionType.Album, options: fetchOptions)

    //let collection = PHAssetCollection.fetchAssetCollectionsWithLocalIdentifiers([asset.localIdentifier], options: fetchOptions)

    assetCollection = collection.firstObject as! PHAssetCollection

    return assetCollection
    

如果我将类型更改为 Moment,问题就会消失。

       let collection: PHFetchResult = PHAssetCollection.fetchAssetCollectionsContainingAsset(asset, withType: PHAssetCollectionType.Moment, options: fetchOptions)

Apple 文档中的常量信息说:

相册 - 照片应用中的相册。 相册可以在照片应用中创建,也可以通过 iTunes 同步显示在 ios 设备上。

SmartAlbum - 内容动态更新的智能相册。 照片应用显示内置智能相册以对某些类型的相关资产进行分组(请参阅资产集合子类型)。

时刻 - 照片应用中的时刻。 照片应用会自动创建时刻以按时间和位置对资产进行分组。

意思是相册下的相机胶卷不是相册而是片刻?我真的很困惑。

【问题讨论】:

【参考方案1】:

相机胶卷没有集合类型PHAssetCollectionType.Album

请尝试使用集合类型 PHAssetCollectionType.SmartAlbum 子类型为PHAssetCollectionSubtype.SmartAlbumUserLibrary

【讨论】:

以上是关于如果类型设置为专辑,PHAssetCollection fetchAssetCollectionsContainingAsset 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Win8 C# 应用程序中设置专辑封面?

如何获取专辑的缩略图

如何使用千千静听为MP3添加专辑封面和文字信息

如何在导航栏的标题项上添加专辑选择器视图

书单华罗庚专辑

如何在音频文件中添加艺术品,以显示在专辑封面中?