我正在使用代理的panel(_:validate)方法从NSSavePanel中验证url,如果url无效则会抛出错误。这种情况下,NSSavePanel会显示一个警报,并且我想根据抛出的错误自定义(即提供一些易读的描述),使保存面板窗口保持打开状态,然后让您选择另一条路径。
当不使用App Sandbox时,LocalizedError运行良好,但在沙盒应用程序中,错误描述的getter从未被调用,警报中的消息是通用的“Operation couldn't be completed. (#yourErrorType)”,我猜这与沙盒化NSSavePanels的不同继承链有关。
我正努力找到解决方法——是否可能在仍然保持应用程序沙盒化的情况下自定义警报?
补充说明:用户选择文件的权限=>r/w。运行以下示例会产生不同的警报,具体取决于是否启用了沙盒。
当不使用App Sandbox时,LocalizedError运行良好,但在沙盒应用程序中,错误描述的getter从未被调用,警报中的消息是通用的“Operation couldn't be completed. (#yourErrorType)”,我猜这与沙盒化NSSavePanels的不同继承链有关。
我正努力找到解决方法——是否可能在仍然保持应用程序沙盒化的情况下自定义警报?
补充说明:用户选择文件的权限=>r/w。运行以下示例会产生不同的警报,具体取决于是否启用了沙盒。
func runSavePanel()
{
let panel = NSSavePanel()
let delegate = SavePanelDelegate()
panel.delegate = delegate
_ = panel.runModal()
}
class SavePanelDelegate: NSObject, NSOpenSavePanelDelegate {
func panel(_ sender: Any, validate url: URL) throws {
throw CustomError.whatever
}
}
enum CustomError: LocalizedError {
case whatever
var errorDescription: String? {
get {
return "my description"
}
}
}