MAUI/Xamarin.iOS:documentPickerMode弃用后文件保存选择及类映射疑问
问题1:创建用于保存的UIDocumentPickerViewController
在Xamarin.iOS中,对应苹果Swift的init(forExporting: [URL])的构造函数已存在,你可以按以下步骤创建导出(保存)用的文档选择器:
- 准备好要导出的文件URL(需为文件系统路径,比如应用沙盒内的文件)
- 使用带
NSUrl[]和bool参数的构造函数,其中bool对应Swift的asCopy默认参数(默认值为true,可按需修改) - 设置代理处理选择后的回调,再弹出选择器
示例代码:
// 示例:获取应用沙盒内的文件URL var documentsDir = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0]; var exportFileUrl = documentsDir.Append("example.txt", true); // 创建导出用的文档选择器 var savePicker = new UIDocumentPickerViewController(new[] { exportFileUrl }, true); // 设置自定义代理(需实现UIDocumentPickerDelegate) savePicker.Delegate = new CustomDocumentPickerDelegate(); // 弹出选择器 PresentViewController(savePicker, animated: true, completionHandler: null);
注意:如果你的Xamarin.iOS版本较旧,需升级到支持iOS14+的版本才能使用该构造函数。
问题2:从苹果Swift文档找对应Xamarin.iOS的C#类及构造函数对应关系
基本对应规则
Swift init ↔ C#构造函数:是的,Swift的
init方法完全对应C#类的构造函数,命名规则一致(都是类名,无返回值)。Swift参数签名的转换:
- Swift的外部参数标签(比如
forExporting)在Xamarin绑定中,通常会整合到参数列表,或针对重载场景保留关键信息区分构造函数/方法。例如Swift的init(forExporting urls: [URL], asCopy: Bool = true),在Xamarin里对应两个重载构造函数:UIDocumentPickerViewController(NSUrl[] urls)(使用默认的asCopy=true)UIDocumentPickerViewController(NSUrl[] urls, bool asCopy)(显式指定asCopy值)
- Swift类型与C#类型直接对应:
URL→NSUrl,[URL]→NSUrl[],Bool→bool,String→string/NSString(Xamarin支持自动转换)。
- Swift的外部参数标签(比如
查找对应C#类的实用方法
- 直接复用类名:苹果文档中的OC/Swift类名(比如
UIDocumentPickerViewController)和Xamarin.iOS中的C#类名完全一致,直接搜索该类名即可。 - 对比参数列表:忽略Swift的外部参数标签,重点看参数的类型、数量和顺序,在Xamarin的构造函数/方法列表中找匹配项。如果有重载,优先看参数类型最接近的。
- 查看Xamarin官方API文档:针对具体类,查看Xamarin的API文档中的构造函数和方法列表,里面会标注对应的iOS版本要求及参数说明。
内容的提问来源于stack exchange,提问作者Luke Vo
相关产品推荐
相关产品推荐

