如何从 PHAssetCollection 正确获取自定义专辑

Posted

技术标签:

【中文标题】如何从 PHAssetCollection 正确获取自定义专辑【英文标题】:How to properly fetch a custom album from PHAssetCollection 【发布时间】:2018-06-25 19:16:17 【问题描述】:

我已经创建了一个自定义相册,现在我正在尝试从 FTP 站点下载视频并将其移动到自定义相册。

我正在使用 Visual Studio 2017 Xamarin C# ios 11.4。 Info.plist 中设置的权限 在此块之前,我正在测试以验证用户是否有权访问照片库。

这是我第一次使用 phphotoLibrary,我找不到很多 C# 代码示例。

没有产生错误,只是在 PHFetchReult fetchResult 开头的行崩溃。

更新 在我的 iPad 上的日志中找到了这个。

日期/时间:2018-06-25 18:05:54 -0400 操作系统版本:iPhone OS 11.4.1(内部版本 15G5072a) 架构:arm64 报告版本:26

数据来源:KPerf 轻量级 PET 内核缓存:0xffffffe000000000 07AF39CA-659D-3636-4A4A-FE05631AA416 原因:UIKit-runloop-AppStore:超时816ms

命令:AppStore 路径:/Applications/AppStore.app/AppStore 标识符:com.apple.AppStore 版本:3.0 (1) 家长:已启动 [1] PID:4415

持续时间:0.80 秒 步数:16(50ms 采样间隔)

硬件型号:J71AP 活跃CPU:2

private PHAssetCollection FindAlbum(string title)

    PHAssetCollection photoAlbum = null;

    var fetchOptions = new PHFetchOptions()  Predicate = 
        NSPredicate.FromFormat(string.Format("title=0", title)) ;
    PHFetchResult fetchResult = PHAssetCollection.FetchAssetCollections(PHAssetCollectionType.Album, PHAssetCollectionSubtype.Any, options: fetchOptions); 

    if (fetchResult.firstObject != null)
    
        photoAlbum = (PHAssetCollection)fetchResult.firstObject;
    
    return photoAlbum;

【问题讨论】:

【参考方案1】:

我知道发生了什么以及如何解决它,尽管我不完全理解为什么对象不返回 null 而是崩溃,也许这是一个错误。

最后,问题是谓词没有被正确传递。由于我专门寻找自定义专辑,因此我还将搜索配对以仅包含 RegularAlbums 的子类型。

希望这可以帮助 C# 世界中的其他人 :)

   private PHAssetCollection FindAlbum(string title)
    
        PHAssetCollection photoAlbum = null;
        var arguments = new NSObject[]  NSObject.FromObject( title) ;
        var fetchOptions = new PHFetchOptions()  Predicate = NSPredicate.FromFormat("title=%@", arguments) ;

        PHFetchResult fetchResult = PHAssetCollection.FetchAssetCollections(PHAssetCollectionType.Album, PHAssetCollectionSubtype.AlbumRegular, fetchOptions);

        if (fetchResult.firstObject != null)
        
            photoAlbum = (PHAssetCollection)fetchResult.firstObject;

        
        return photoAlbum;
    

【讨论】:

以上是关于如何从 PHAssetCollection 正确获取自定义专辑的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHFetchOptions.predicate 从 PHAssetCollection 获取 PHAsset 的问题

如何知道 PHAssetCollection 是不是是最近删除的集合?

删除 PHAssetCollection (Swift)

创建后如何获得指向新 PHCollectionList(或 PHAssetCollection)的指针

如何编辑或重命名 PHAssetCollection LocalizedTitle?

何时使用 PHAsset、PHCollection、PHAssetCollection 和 PHCollectionList