安装时应用程序无法正常运行

Sam*_*Sam 1 macos cocoa objective-c nsbundle

我的Mac OS X应用程序出现了一个奇怪的问题.我有一个在辅助线程中运行的进程.该过程在for循环中以用户指定的次数重复某个动作.

对于for循环的每次迭代,都有一个字符串,该字符串使用字符串文件的内容进行初始化.如果字符串文件的内容等于"YES"则循环中断("NO"默认情况下将文件设置为).当用户想要停止循环时,他们点击"停止"按钮,该按钮将文件的内容设置为"YES".

当我在Xcode中运行应用程序并将应用程序导出为.app时,这实际上很有用.当我实际将应用程序转换为pkg并安装它时,会出现问题.停止功能不再正常运行.关于问题是什么,我很难过.我正在初始化我对文件的所有引用,[NSBundle mainBundle]所以我应该在我的应用程序包中引用该文件.

编辑:我实际上决定切换到检查循环中的原子BOOL值,当按下停止按钮时我更改.这对我来说似乎是一个更简单的解决方案.

Jos*_*zzi 5

由于非常好的安全原因,普通用户无权修改/ Application文件夹中安装的应用程序.此外,如果不使签名代码无效,则无法修改已签名的应用程序(即通过App Store销售的任何应用程序).

永远不要依赖可修改的应用程序包.它永远不应该是.对于与应用相关的非文档文件,始终 使用标准用户数据文件夹,如"〜/ Library/Application Support /"或"〜/ Library/Caches /".

至于你的一般方法,重复轮询文件 - 特别是在紧密循环中 - 是很多磁盘活动."笔记本电脑Killah"将是该应用程序的一个好名字.:-)您应该考虑完全改变这种方法.如果你在另一个问题(你正在做什么以及为什么)中提供更多细节并征求建议,我几乎肯定会有一些更好的方法,不会像用户那样嘲笑用户的电池电量 - 在杂货店里啃大鼠.

此外,我猜你永远不会检查你的文件是否写得成功.标准-writeToURL/File:...方法返回BOOL以指示成功或失败,并设置NSError(如果您将指针传递给一个),并提供更多详细信息.养成忽视这一点的习惯.在这种情况下,您可能已经找到了自己的答案,因为您已经知道代码的中断位置.从那里开始,找出原因并不是一个巨大的飞跃.