- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用委托(delegate)的 panel(_:validate) 方法验证来自 NSSavePanel 的 url,如果 url 无效则抛出错误。在这种情况下,NSSavePanel 会显示一个警报,我想根据抛出的错误对其进行自定义(意味着呈现一些人类可读的描述),保持保存面板窗口打开,然后让您选择另一条路径。
LocalizedError 在不使用 App Sandbox 时工作得很好,但在沙盒应用程序中,错误描述的 getter 永远不会被调用,并且警报中的消息是通用的“操作无法完成。(#yourErrorType)”,我猜不知何故是由沙盒 NSSavePanel 的不同继承链引起的。
我正在努力寻找解决此问题的方法 - 是否可以以某种方式自定义警报,同时仍将应用程序沙盒化?
附录:用户选择文件的权限 => 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"
}
}
}
最佳答案
因此,在进一步挖掘之后,我终于可以说出谜语的解决方案,尽管我只能猜测它被 Apple 设置为棘手的原因。显然 NSError 只需要使用。自定义必须在 userInfo 中完成,比如说
let userInfo = [NSLocalizedDescriptionKey: "yourLocalizedDescription", NSLocalizedRecoverySuggestionErrorKey: "yourSuggestion"]
throw NSError(domain: "whatever", code: 0, userInfo: userInfo)
等顺便说一下,子类化 NSError 不起作用,Sandbox 会很高兴地忽略你:)
关于swift - 自定义沙盒 NSSavePanel 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51945594/
在沙箱环境中,NSSavePanel 由 Powerbox 进程控制。 我想知道是否有一种方法可以关闭 NSSavePanel 而无需用户显式单击“取消”或按 Esc 键?例如,如果我想在 NSSav
我有一个 NSSavePanel,我想处理“取消”按钮操作以防止关闭工作表。想要在 savePanel 工作表上方显示确认警报,就像您想在保存时覆盖文件一样。 实现此目的的最佳方法是什么? 谢谢 最佳
简单的问题:我想处理在 NSSavePanel 中按下取消按钮的操作。我将面板与委托(delegate)类一起使用: NSSavePanel *save = [NSSavePanel savePane
我在理解新的 Lion's Sandbox 时遇到一些问题。 我知道 Lion 包含一个名为 Powerbox 的可信守护进程,其工作是代表沙盒应用程序显示和控制打开/保存对话框。 喜欢Code Si
我正在使用 NSSavePanel保存图像。 我用过 IKSaveOption它被添加到 NSSavePanel 中。 当保存面板尝试打开窗口的工作表时,它会崩溃说 - *** Assertion f
我是 OSX GUI 编程的新手,所以请多多关照。 我正在尝试一些实验,将 appkit 中的轻型 GUI 元素添加到 CLI,因此我正在开发一个非常小的程序来获取 PDF 的内容并将其保存到文本文件
在我的 mac 应用程序中,我正在使用 NSSavePanel - 但它的行为很奇怪。有时我无法更改文件的默认名称。 我是这样使用它的: NSSavePanel *savePanel = [NSSav
我仅在处理文本文件时使用NSSavePanel。如果我有要导出的图像,我会使用 NSOpenPanel 以便用户可以选择一个目录,并且我不会陷入沙箱文件路径限制。不过,这一次,我想使用 NSSaveP
我可以将 NSSavePanel 与沙盒 OS X 应用程序一起使用,让用户在桌面上保存吗?我为用户提供了下载和用户选择的文件夹的读/写权限,由于某种原因,我的应用程序可以很好地保存在下载文件夹中,但
我正在 Mavericks 系统上编写一个应用程序。我正在调用 NSSavePanel 来保存文件。我可以为面板提供一个 UTI 的 NSArray 以尽可能使用保存类型,并且(我猜)面板将自动生成输
我正在制作一个具有 NSSavePanel 的 Cocoa 应用程序。在此面板模式的生命周期内,我允许用户通过这两个 View 中的复选框在该面板的两个不同附件 View (称为 View A 和 V
情况很简单,需要将 NSSavePanel 的导航截断到单个目录。 可能遗漏了一些东西,但到目前为止还没有运气。 除此之外一切都正常。 最佳答案 这可能不适用于 10.9(或更高版本) 实现委托(de
如何设置在 NSSavePanel 中选择的文件名部分?我只想选择文件名而不是文件扩展名。 这是我注意到的。如果我为保存面板设置AllowedFileTypes:,则仅选择文件名,而不选择文件扩展名。
NSSavePanel 会记住之前选择的目录。 如何让它忘记它,并恢复默认值? 我正在使用沙盒应用程序。 最佳答案 /*获得一个面板,该面板首先指向 OS X 确定的正确默认值目录(没有最后保存的目录
我有一个使用 NSSavePanel 的应用程序。 该应用是一个视频编辑应用,我需要这个保存面板来显示视频格式的选择菜单。 我怎样才能做到这一点? 这是一个简单的代码: NSSavePanel *my
当我使用 beginWithCompletionHandler: 打开 NSSavePanel 或 NSOpenPanel 实例时,处理程序永远不会被调用。相反,我看到该面板出现了不到一秒钟,然后又消
当应用程序处于后台时显示 NSSavePanel 时,我收到以下错误: RVS:__54-[NSRemoteSavePanel _runOrderingOperationWithContext:]_b
我需要用户选择一个现有的或新的目录,我的应用程序可以在其中保存一些文件。 我可以使用 NSSavePanel 来做到这一点还是有另一个目录选择器类? 最佳答案 NSSavePanel不提供选择文件夹的
NSSavePanel 曾经有一个 runModalForDirectory:file: 方法,可让您预设保存面板的目录和文件名。但这在 10.6 中已被弃用 创建 NSSavePanel 时,如何在
我正在使用委托(delegate)的 panel(_:validate) 方法验证来自 NSSavePanel 的 url,如果 url 无效则抛出错误。在这种情况下,NSSavePanel 会显示一
我是一名优秀的程序员,十分优秀!