如何从 PHAssetCollection 中正确获取自定义相册
How to properly fetch a custom album from PHAssetCollection
我已经创建了一个自定义相册,现在我正在尝试从 FTP 网站下载视频并将其移动到自定义相册。
我正在使用 Visual Studio 2017 Xamarin C# ios 11.4.
Info.plist 中设置的权限
在此块之前,我正在测试以验证用户是否已获得访问照片库的授权。
这是我第一次使用 PHPhotoLibrary,我找不到很多 C# 代码示例。
没有产生错误,只是在 PHFetchReult fetchResult 开头的行崩溃。
已更新
在我的 iPad 上的日志中找到了这个。
Date/Time: 2018-06-25 18:05:54 -0400
OS 版本: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)
父级:launchd [1]
PID: 4415
时长:0.80s
步数: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;
}
虽然我不完全理解为什么对象不是 return 而是崩溃,但我弄清楚了发生了什么以及如何解决它,也许这是一个错误。
最后,问题是谓词没有被正确传递。我还配对了搜索以仅包含 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;
}
我已经创建了一个自定义相册,现在我正在尝试从 FTP 网站下载视频并将其移动到自定义相册。
我正在使用 Visual Studio 2017 Xamarin C# ios 11.4.
Info.plist 中设置的权限
在此块之前,我正在测试以验证用户是否已获得访问照片库的授权。
这是我第一次使用 PHPhotoLibrary,我找不到很多 C# 代码示例。
没有产生错误,只是在 PHFetchReult fetchResult 开头的行崩溃。
已更新 在我的 iPad 上的日志中找到了这个。
Date/Time: 2018-06-25 18:05:54 -0400 OS 版本: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) 父级:launchd [1] PID: 4415
时长:0.80s 步数: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;
}
虽然我不完全理解为什么对象不是 return 而是崩溃,但我弄清楚了发生了什么以及如何解决它,也许这是一个错误。
最后,问题是谓词没有被正确传递。我还配对了搜索以仅包含 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;
}