You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI/Xamarin.iOS:documentPickerMode弃用后文件保存选择及类映射疑问

问题1:创建用于保存的UIDocumentPickerViewController

在Xamarin.iOS中,对应苹果Swift的init(forExporting: [URL])的构造函数已存在,你可以按以下步骤创建导出(保存)用的文档选择器:

  1. 准备好要导出的文件URL(需为文件系统路径,比如应用沙盒内的文件)
  2. 使用带NSUrl[]和bool参数的构造函数,其中bool对应Swift的asCopy默认参数(默认值为true,可按需修改)
  3. 设置代理处理选择后的回调,再弹出选择器

示例代码:

// 示例:获取应用沙盒内的文件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#类及构造函数对应关系

基本对应规则

  1. Swift init ↔ C#构造函数:是的,Swift的init方法完全对应C#类的构造函数,命名规则一致(都是类名,无返回值)。

  2. 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支持自动转换)。

查找对应C#类的实用方法

  • 直接复用类名:苹果文档中的OC/Swift类名(比如UIDocumentPickerViewController)和Xamarin.iOS中的C#类名完全一致,直接搜索该类名即可。
  • 对比参数列表:忽略Swift的外部参数标签,重点看参数的类型、数量和顺序,在Xamarin的构造函数/方法列表中找匹配项。如果有重载,优先看参数类型最接近的。
  • 查看Xamarin官方API文档:针对具体类,查看Xamarin的API文档中的构造函数和方法列表,里面会标注对应的iOS版本要求及参数说明。

内容的提问来源于stack exchange,提问作者Luke Vo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:35:54