首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义沙箱NSSavePanel警报

自定义沙箱NSSavePanel警报
EN

Stack Overflow用户
提问于 2018-08-21 09:26:59
回答 1查看 327关注 0票数 3

我正在使用委托面板( NSSavePanel )方法验证来自_:validate的url,在出现无效url的情况下抛出错误。在这种情况下,NSSavePanel会显示一个警报,我希望根据抛出的错误进行自定义(意思是提供一些人类可读的描述),保持保存面板窗口打开,然后让您选择另一条路径。

当不使用and时,LocalizedError工作得很好,但在沙箱应用程序中,错误描述的getter从未被调用,警报中的消息是“操作无法完成。(#yourErrorType)",我猜这是由沙箱NSSavePanels的不同继承链造成的。

我很难找到解决这个问题的方法--是否有可能在保持应用程序沙箱化的同时以某种方式定制警报呢?

增编:用户选择的文件的权限( => r/w )。运行下面的示例将生成不同的带有/不带沙箱的警报。

代码语言:javascript
复制
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"
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-24 01:21:25

因此,经过进一步的挖掘,我终于可以说出谜团的答案了,尽管我只能猜测为什么苹果让这个谜团变得棘手。显然,只需要使用NSError。定制必须在userInfo中完成,比如

代码语言:javascript
复制
let userInfo = [NSLocalizedDescriptionKey: "yourLocalizedDescription", NSLocalizedRecoverySuggestionErrorKey: "yourSuggestion"]
throw NSError(domain: "whatever", code: 0, userInfo: userInfo)

等等。顺便说一句,子类NSError不起作用,沙箱会很高兴地忽略您:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51945594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档