使用 Mac 保存对话框时崩溃

Posted

技术标签:

【中文标题】使用 Mac 保存对话框时崩溃【英文标题】:Crash while using Mac save dialog 【发布时间】:2021-10-12 11:46:32 【问题描述】:

我们的用户遇到以下情况的异常:

    以任意名称保存文件,例如“test1”。 打开保存对话框再次保存(该对话框现在默认提示“test1”)。 单击“保存”,然后单击“替换”以覆盖现有文件。

结果:异常。

如果,就在步骤 3 之前,用户在对话框查找器窗口中单击文件(名称“test1”仍然存在)- 也不例外。

我发现 here 提到了这个问题,并尝试使用给定的建议 - 但没有帮助。

这是我的代码的简化:

#define kMaxPathLength 1023
[self setDialogResult:[dialog runModal]];

if ([self dialogResult] == NSOKButton)

    char pathBuffer[kMaxPathLength];
    @try
        NSString* pathcopy = [[dialog URL] path];  // <== Causes the exception
        [pathcopy getCString:pathBuffer maxLength:kMaxPathLength encoding: NSUTF8StringEncoding];
    
    @catch(NSException* e)
        <breakpoint>
    

带注释的行导致异常:

ROSP: sandbox extension failure: nil result or wrong class type ((null)) for finalURL

注意:上述注释行和以下行是对原始语句的细分:

[[[dialog URL] path] getCString:pathBuffer maxLength:kMaxPathLength encoding:NSUTF8StringEncoding];

也会发生异常。

使用 Xcode 12,Catalina。

有什么建议可以避免这个异常吗?

【问题讨论】:

能否在小型测试项目中重现问题? 【参考方案1】:

通过在“另存为”对话框的建议名称中明确指定文件扩展名,最终解决了此错误(实际上已解决)。 仅指定基本名称(无扩展名)时会发生该错误。

【讨论】:

以上是关于使用 Mac 保存对话框时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Mac Catalyst - 保存文件的标准对话框

设置Mac 中保存对话框默认为扩展窗口

Mac Catalyst 的替代 UIActivityViewController 保存对话框或 UIDocumentPickerViewController 抛出错误代码 260 的解决方案

MS Access VBA 文件对话框崩溃

在使用 TimePicker 或 NumberPicker 查看对话框首选项时旋转 Android 设备会导致应用程序崩溃

Facebook iOS SDK 3.5.1 好友请求对话框在关闭时崩溃