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

Objective c 安装时应用程序无法正常运行,objective-c,macos,cocoa,nsbundle,Objective C,Macos,Cocoa,Nsbundle,我的Mac OS X应用程序出现了一个奇怪的问题。我有一个在辅助线程中运行的进程。该进程在for循环中以用户指定的次数重复某个操作 对于for循环的每次迭代,都会有一个字符串,该字符串使用字符串文件的内容进行初始化。如果字符串文件的内容等于“YES”,则循环中断(默认情况下,文件设置为“NO”)。当用户想要停止循环时,他们点击“停止”按钮,将文件内容设置为“是” 当我在Xcode中运行应用程序并将应用程序导出为.app时,这实际上非常有效。当我将应用程序转换为pkg并安装它时,问题就出现了。停止

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

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

当我在Xcode中运行应用程序并将应用程序导出为.app时,这实际上非常有效。当我将应用程序转换为pkg并安装它时,问题就出现了。停止功能不再正常工作。我很困惑到底是什么问题。我正在使用
[NSBundle mainBundle]
初始化对文件的所有引用,因此我应该引用应用程序包中的文件


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

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

永远、永远、永远依赖可修改的应用程序包。这是不应该的对于与应用程序相关的非文档文件,总是像“~/Library/Application Support/”或“~/Library/Caches/”这样

至于您的一般方法,反复轮询一个文件——特别是在一个紧密循环中——是大量的磁盘活动。“笔记本电脑杀手”应该是这个应用的好名字。:-)你应该考虑改变这种方法。如果你在另一个问题(你在做什么,为什么)中提供更多细节并征求建议,我几乎肯定会有很多更好的方法,不会像杂货店里的坏老鼠那样消耗用户的电池电量


另外,我猜你从来没有检查过你的文件是否写成功。标准-writeToURL/文件:。。。方法返回一个BOOL来表示成功或失败,并设置一个NSError(如果您传递一个指向NSError的指针)和更多细节。养成不忽视这一点的习惯。在这种情况下,您可能已经找到了自己的答案,因为您已经知道您的代码在哪里被破坏。从那以后,找出原因并不是一个巨大的飞跃。

出于非常好的安全原因,普通用户没有修改安装在/Application文件夹中的应用程序的权限。此外,如果不使您的签名代码无效,则无法修改已签名的应用程序(即,通过应用商店销售的任何应用程序)

永远、永远、永远依赖可修改的应用程序包。这是不应该的对于与应用程序相关的非文档文件,总是像“~/Library/Application Support/”或“~/Library/Caches/”这样

至于您的一般方法,反复轮询一个文件——特别是在一个紧密循环中——是大量的磁盘活动。“笔记本电脑杀手”应该是这个应用的好名字。:-)你应该考虑改变这种方法。如果你在另一个问题(你在做什么,为什么)中提供更多细节并征求建议,我几乎肯定会有很多更好的方法,不会像杂货店里的坏老鼠那样消耗用户的电池电量


另外,我猜你从来没有检查过你的文件是否写成功。标准-writeToURL/文件:。。。方法返回一个BOOL来表示成功或失败,并设置一个NSError(如果您传递一个指向NSError的指针)和更多细节。养成不忽视这一点的习惯。在这种情况下,您可能已经找到了自己的答案,因为您已经知道您的代码在哪里被破坏。从那以后,找出原因就不会是一个巨大的飞跃。

答案很好。非常感谢你!回答得很好。非常感谢你!