c# - IOS 14 请求限制照片访问
问题描述
我正在尝试使用 PHPickerController 并访问 PHAsset 以获取文件名和文件大小,但 PHAsset 为空
var config = new PHPickerConfiguration(PHPhotoLibrary.SharedPhotoLibrary) {
Filter = PHPickerFilter.ImagesFilter,
SelectionLimit = 1
};
var picker= new PHPickerViewController(config) {
ModalPresentationStyle = UIModalPresentationStyle.Popover,
Delegate = new ImagePickerDelegate((fileSize, fileName, url) => {
})
};
ViewController.PresentViewController(picker, true, null);
public class ImagePickerDelegate : PHPickerViewControllerDelegate
{
public ImagePickerDelegate(Action<int, string, string> action)
{
Action = action;
}
public Action<int, string, string> Action { get; }
public override void DidFinishPicking(PHPickerViewController picker, PHPickerResult[] results)
{
picker.DismissViewController(true, null);
foreach (var result in results)
{
var asset = PHAsset.FetchAssets(result.AssetIdentifier, null)?.firstObject as PHAsset;
// The asset are null
var fileSize = asset.ValueForKey((NSString)"fileSize");
}
}
}
正如您在图像中看到的那样,请求对话框显示和代码不会在下一行暂停
var 资产 = PHAsset.FetchAssets(result.AssetIdentifier, null)?.firstObject 作为 PHAsset;
并返回 null
解决方案
您可以使用FetchAssetsUsingLocalIdentifiers方法获取PHAsset对象,然后它将返回值。
示例代码如下:
public override void DidFinishPicking(PHPickerViewController picker, PHPickerResult[] results)
{
picker.DismissViewController(true, null);
foreach (var result in results)
{
var refID = result.AssetIdentifier;
string[] refIDs = new string[] { refID };
var asset = PHAsset.FetchAssetsUsingLocalIdentifiers(refIDs, null)?.firstObject as PHAsset;
// var fileSize = asset.ValueForKey((NSString)"fileSize");
}
}
也可以看看这个本机代码链接。
推荐阅读
- laravel - Undefined variable: category in edit.blade
- c - C中静态函数的优先级
- activemq - 我们可以根据消息属性或标头对 ActiveMQ 消息进行优先级排序吗?
- r - 如何为 ggplot2 轴中的单个值使用多种颜色?
- python - 使用 imputer 后如何将数据放入数据框中?
- rabbitmq - Spring AMQP RabbitMQ 不消耗所有消息,worker 过早完成
- amazon-web-services - How to speed up the copy in S3 bucket?
- java - 无法使用 TouchActions 滚动
- snakemake - Snakemake › 从配置文件访问多个密钥
- c# - 如何将对象映射到 C# 中谷歌分析事件的正确查询字符串?