NSSavePanel 在沙箱应用程序后不保存文件

2023-12-24

我在保存字符串文件时遇到问题NSSavePanel将应用程序沙箱到 Mac App Store 后。我设置com.apple.security.files.user-selected.read-write to YESNSOpenPanel正在正常工作。

但是,当我尝试保存新文件时,似乎一切正常,但没有保存文件应该在的位置......

这是我用来保存文件的代码:

NSSavePanel *save = [NSSavePanel savePanel];

long int result = [save runModal];

if (result == NSOKButton)
{
    NSString *selectedFile = [save filename];
    NSString *fileName = [[NSString alloc] initWithFormat:@"%@.dat", selectedFile];
    NSString *arrayCompleto = [[NSString alloc]initWithFormat:@"bla bla bla"];
    [arrayCompleto writeToFile:fileName
                    atomically:NO
                      encoding:NSUTF8StringEncoding
                         error:nil];
}

首先,-[NSSavePanel filename]选择器已被弃用。使用-[NSSavePanel URL]反而。其次,方法-[NSString writeToFile:atomically:encoding:error]告诉你你做错了什么error:(NSError**)争论。

您还应该特别处理文件 I/O 的错误,因为即使您的代码 100% 正确,用户系统上仍然可能存在错误(权限不足等),并且向用户呈现错误将允许他们看到它失败了(并且知道为什么)。处理代码中的错误也将使您的应用程序能够恢复。例如,如果您尝试读取粘贴的代码下方的文件(将其写入磁盘后),但用户尝试将其写入他们无权访问的网络共享,则您的应用程序可能会崩溃。如果您知道写入失败,则可以进行相应操作(可能会提示输入不同的保存位置)。

但在这种情况下,我相信以下行是您的问题:

NSString *fileName = [[NSString alloc] initWithFormat:@"%@.dat", selectedFile];

当您的应用程序被沙盒化时,用户需要向您授予以下任一权限:特定文件 or a 具体目录通过打开/保存面板将它们带入您的沙箱。您所做的就是获取用户授予您写入权限的文件并说“这很好,但我想保存另一个文件”,这违反了沙箱。您应该做的是在保存面板中设置扩展名。完整的固定解决方案是:

NSSavePanel *save = [NSSavePanel savePanel];
[save setAllowedFileTypes:[NSArray arrayWithObject:@"dat"]];
[save setAllowsOtherFileTypes:NO];

NSInteger result = [save runModal];

if (result == NSOKButton)
{
     NSString *selectedFile = [[save URL] path];
     NSString *arrayCompleto = @"bla bla bla";

     NSError *error = nil;
     [arrayCompleto writeToFile:selectedFile
                     atomically:NO
                       encoding:NSUTF8StringEncoding
                          error:&error];
}

if (error) {
    // This is one way to handle the error, as an example
    [NSApp presentError:error];
}

如果以后出现其他问题,您可以检查error在运行时。调试时,在里面设置断点if (error)要检查的声明error对象的值(执行po error在 Xcode 的调试器中)。这应该可以帮助您找出问题所在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSSavePanel 在沙箱应用程序后不保存文件 的相关文章

  • WiFi 网络变化是否有 NSNotificationCenter 通知?

    我想在我的 Cocoa 应用程序中订阅 WiFi 网络更改 但我无法找到合适的事件来订阅 WiFi 网络变化是否有 NSNotificationCenter 通知 据我所知 我会用CoreWLAN https developer apple
  • iPhone Twitter SDK 与 iOS 5 设备的集成问题

    我已成功将 Twitter Sharekit 与我的 iPad 应用程序源集成 当我在模拟器和装有 iOS 4 X 的 iPad 1 上测试该应用程序时 它运行完美 并且成功发布了推文 但是 如果我在装有 iOS 5 的 iPad 2 上安
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典
  • 在故事板中将 UITableView 的 rowHeight 设置为 UITableViewAutomaticDimension ?

    在 Xcode 6 中创建 iOS 8 应用程序时 如何设置 UITableViewrowHeight to UITableViewAutomaticDimension In WWDC 2014 第 226 场会议 表和集合视图中的新增功能
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 如何确定 NSTimeInterval 是否发生在任意 NSDate 期间?

    我有一个 NSTimeInterval 我想知道该时间戳是否位于日期的开始和结束之间 基本上我需要能够做类似的事情 NSDate today NSDate date NSTimeInterval myInterval someInterva
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • 高效创建 x 层深度的嵌套 for 循环

    这可能是一件简单的事情 但我需要创建一个循环结构 使其循环 y x 次以创建 x 和 y 的所有可能组合 例如 如果有 4 个 x 每个 x 有 2 个 y 我想做这样的事情 for int a 0 a lt y a for int b 0
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 为沙盒 Cocoa 应用程序创建临时文件

    我的应用程序是沙箱化的 根据最新的应用程序商店指南 我想创建一些临时文件 我可以这样做吗 如果 是 我可以在哪里这样做 有没有预先指定的路径 还有访问该路径的命令 您应该使用NSTemporaryDirectory 函数 它将查找并返回适合
  • 如何使 for 循环以与 NSLog(@"%@", arrData) 相同的顺序迭代

    我执行了以下代码NSLog arrData 调试器中的输出预计如下所示 0 first name John 1 first name Florence 2 first name Melinda 3 first name Zack 然后我执行
  • 如何在iOS应用程序中捕获用户的手写签名[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在我的应用程序中 用户将请求客户提供数字化的手写签名 我需要能够在用户在触摸屏上 书写 签名时捕获签名
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • iCloud loadFrom Contents - 如何处理 UIDocumentStateSavingError 和 UIDocumentStateEditingDisabled

    我在我的应用程序中使用 iCloud 来加载文本文件 加载文本文件时 当我调用时 iCloud 会调用此方法 UIDocument openWithCompletionHandler BOOL success etc BOOL loadFr

随机推荐

  • 为什么当 SBT 程序集发现冲突时 Maven 程序集可以工作

    标题也可以是 Maven 和 SBT 组装插件之间有什么区别 在将项目从 Maven 迁移到 SBT 时 我发现这是一个问题 为了描述这个问题 我创建了一个示例项目 其中的依赖项我发现它的行为有所不同 具体取决于构建工具 https git
  • 从 Bash 脚本在 PostgreSQL 中创建 FUNCTION

    我正在尝试从 Bash 脚本在 Postgres 数据库中创建一个函数 不幸的是 我无法让它工作 这是我的脚本 bin bash Save Postgres command to POSTGRES CMD read d POSTGRES C
  • 在pyspark中将列的内容拆分为行

    我有一个数据框 df SiteID LastRecID Col to split 2 1056962584 214 207 206 205 2 1056967423 213 208 2 1056870114 213 202 199 2 10
  • 为什么Delphi DLL可以使用WideString而不使用ShareMem?

    大卫对另一个问题的回答 https stackoverflow com a 9328272 937125显示返回 WideString 的 Delphi DLL 函数 我从来没有想过如果不使用ShareMem 我的测试DLL functio
  • WordPress:ACF 将行添加到重复器字段

    我正在寻找一种将行添加到 ACF Pro 中的重复器字段的方法 我发现这个帖子 https stackoverflow com questions 24879399 wordpress acf how to add rows to a re
  • 从 MIDI 文件中获取音符数据

    有没有办法从 MIDI 文件中获取音符数据 也就是说 我想将 MIDI 文件分解为其组成部分 以便它们采用唯一单词 或任何其他数据类型 的形式 我最终想要做的是接收 MIDI 文件并在音符中找到模式 进入每个音符 找到它的 被演奏的 频率
  • 为什么React中全局变量执行了两次

    我是前端开发和学习 React 的新手 现在我正在尝试构建一个 hello world 项目 执行后npx create react app myapp 我得到了一个初始的 React 项目 我刚刚在文件中编码App js import R
  • 无法创建套接字工厂“com.google.cloud.sql.mysql.SocketFactory;”

    我似乎无法让这个工作 我在用谷歌灵活的环境并想要连接到我的第二代云SQL数据库 我目前收到此异常 main ERROR com mahlzeit server BootstrappingServerConfig Error trying t
  • Rails:通过 ActiveResource 调用设计身份验证

    我的两个 Rails 应用程序 app1 app2 正在使用活动资源进行通信 app1 调用 app2 在 app2 内创建用户 app2 将创建用户 并希望 app1 然后将用户重定向到 app2 的经过身份验证的页面 从 app1 到
  • 为什么即使 SQL 语句产生语法错误,SQL 注入也会成功?

    In 这个问题 https stackoverflow com q 11873585 869912和一些评论 这个输入 input DELETE FROM table name 建议将 SQL 注入到此 PHP 语句中作为示例 input
  • C++ 中字符串向量的 Reserve() 函数

    我正在尝试填充字符串类型的向量 并且字符串的内存将定期更新 我在论坛中发现 由于每次更新大小时内存重新分配 这两个过程都会消耗大量时间另请阅读 储备功能几乎解决了这两种情况的问题 gt String http www cplusplus c
  • Twig 模板单元测试

    我开始考虑 Symfony 中 Twig 模板的持续集成 模板是独立的逻辑 模板中有错误 但在开发过程中我不想因为目视检查而分心 在 Symfony 中是否有任何现成的解决方案可以对 twig 文件进行单元测试 测试树枝模板中的语法错误 您
  • 如何限制 RAM 以测试内存不足的情况?

    我正在尝试重现当用户用完大量 RAM 时似乎出现的错误 限制计算机可以使用的可用 RAM 或填满大部分 RAM 的最佳方法是什么 我更愿意在不物理删除内存的情况下执行此操作 并且不运行一堆任意的内存密集型程序 即 Photoshop Qua
  • Asp.NET Core 2.1 HostedService - 继续在 Azure 上运行

    我们有一个使用 IHostedService 的 Web 应用程序 有一个这样的例子here https gist github com davidfowl a7dd5064d9dcf35b6eae1a7953d615e3 我们采用的方法是
  • 在 OS X 上初始化 D 运行时

    编辑 这似乎是一个长期存在的问题 没有迫在眉睫的解决方案 http d puremagic com issues show bug cgi id 8133 http d puremagic com issues show bug cgi i
  • Joda-Time:DateTime、DateMidnight 和 LocalDate 的使用

    乔达时间 http www joda org joda time 库包含不同的日期时间类 DateTime http www joda org joda time apidocs org joda time DateTime html 不可
  • 嵌入模式给出错误

    我试图将模式嵌入到我创建的其他模式中 但我不断收到此错误 我不完全确定这里出了什么问题 但我想要做的是将我的事件模式和兴趣模式的引用存储在用户模式内 如果有人能告诉我我做错了什么 那就太好了 谢谢 编辑 我现在收到一个新错误 Users D
  • Django:如何检查用户名是否已经存在?

    我不是 Django 的高级用户 我在网上看到了很多不同的方法 但它们都是针对修改模型的 或者太复杂 我无法理解 我正在重复使用UserCreationForm in my MyRegistrationForm class MyRegist
  • “this”关键字在 Nodejs 和浏览器中的行为不同

    我有这段代码 var obj1 var obj2 function x obj1 this function y obj2 this x y console log obj1 obj2 console log obj1 this 我使用命令
  • NSSavePanel 在沙箱应用程序后不保存文件

    我在保存字符串文件时遇到问题NSSavePanel将应用程序沙箱到 Mac App Store 后 我设置com apple security files user selected read write to YES和NSOpenPane