0

我的问题在上面的标题中已经说明,但我会在这里再次写

是否可以明智地将不同的 plist 复制到应用程序包代码中?

这实际上与我之前的问题有点相关;)以编程方式创建字典属性列表

但是因为我可以写出 plist(并测试我是否做错了什么)我想知道我是否可以复制我的书面文件

[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];

到我的代码中的应用程序包(以便它可以从这里读取 NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];

另一种选择也很好,例如,如果我可以直接从另一个路径而不是 mainBundle 读取我的 plist

4

2 回答 2

2

我不知道您在做什么,但根据您的应用程序,您可能需要使用 Application Support 目录:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
    // Create the directory if it doesn't exist, etc.
} else {
    NSLog(@"Fail!");
    // ...
}
于 2009-07-16T08:31:28.337 回答
2

物理上,是的,有时是可能的。

不,不要那样做!!

好的...将内容复制到您的 App Bundle 是不好的,您的 App Bundle 不是您保存设置或数据的地方。您应该将您的应用程序包视为只读的。您应该这样做有几个原因:

  1. 虽然大多数时候 Mac OS X 系统上的用户有权写入应用程序,但有时他们没有。想想不使用管理员帐户或学校实验室部署的孩子。
  2. 它将使代码设计无效。如果您签署您的应用程序,这将更改签名并破坏协同设计,从而导致各种奇怪的问题(丢失应用程序拥有的任何防火墙权限,告诉用户应用程序已更改并再次要求他们获得钥匙串权限等)。将来这也可能会弹出各种警告,因为篡改应用程序是一个很大的安全危险信号。
  3. 它不适用于 iPhone。这可能不是问题,但如果您每个人都打算在 iPhone 上使用此代码,则应用程序包是只读沙盒的

放置此类内容的正确位置是 Application Support 文件夹的子文件夹

于 2009-07-16T08:41:28.100 回答