0

我正在开发一个 mac 应用程序,我想将我的设置(字符串数组)放入一个文件中。如果该文件与应用程序存在于同一文件夹中,则会读取该文件并覆盖默认设置。

写入文件没有问题,但使用代码读取时:

NSArray* settingsInput = [[NSArray alloc] initWithContentsOfFile:@"./SettingsFile"];

奇怪的事情发生了。从 XCode 运行应用程序时(设置文件位于应用程序旁边的 build/debug 文件夹中)设置读取没有问题。当我存档应用程序并从桌面运行它时,无法加载该文件。即使我将应用程序从构建文件夹复制到桌面,它也不起作用。

这种行为的原因可能是什么?我怎样才能阅读这个文件?

4

3 回答 3

3

使用正常的偏好系统可能是一个更好的主意。NSUserDefaults。

有几种方法可以做到这一点。但我们的想法是为您的应用程序提供一组默认首选项,这些首选项在正确的域中为您注册,并且始终使用新的应用程序。

使用registerDefaults:来自NSUserDefaults

请参阅 Apple 文档 NSUserDefaults及其 # registerDefaults

但我会使用的是:

将 plist 文件复制到 Xcode 项目的支持文件中。

在此处输入图像描述

确保选中“将文件复制到目标组的文件夹”。并且“也检查添加到目标”

在此处输入图像描述

plist 文件应包含您的字符串数组。

在此处输入图像描述

(我创建了我的。通过在我的用户首选项中复制另一个 plist。重命名它。将其复制到项目中。选择它并根据需要对其进行编辑。确保我使用文件菜单 - >“保存”来保存更改. )

声明一个NSUserDefaults * prefs;

在此处输入图像描述

现在在应用程序的 - (id)init 方法中。您将文件的内容注册为默认首选项。

- (id)init
{
    self = [super init];
    if (self) {


        prefs = [NSUserDefaults standardUserDefaults] ;
        NSString *registerDefaultsPlistFile= [[NSBundle mainBundle] pathForResource:@"registerDefaults" ofType:@"plist"];
  [prefs registerDefaults:[NSDictionary dictionaryWithContentsOfFile: registerDefaultsPlistFile]];


    }
    return self;
}

您可以稍后拨打电话阅读这些首选项。

 NSLog(@" arrayOfStrings =   %@",  [prefs objectForKey:@"arrayOfStrings" ]);

除非您对它们进行更改,否则这些默认首选项不会写入文件/输出。写入文件是指应用程序首选项文件。一旦你对它们进行了更改,它们就会被写入用户的偏好中,这些就是从那时起将使用的东西。

于 2013-09-20T10:17:13.230 回答
2

您不应依赖应用程序的当前目录。您应该从应用程序包(请参阅NSBundle获取正确路径的类)或应用程序的文档目录(请参阅 参考资料)中读取NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ...

于 2013-09-19T09:41:27.753 回答
1

当前工作目录的 UNIX 概念在 Mac 桌面应用程序中并不常用。通过 Finder 启动应用程序时,它通常设置为启动卷的根目录。

您应该找到另一种方法来确定设置文件的位置。好的地方是~/Library/Preferences~/Library/Application Support/MyApp。您可以使用以下命令获取这些目录的绝对路径:

NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomain, YES)[0];
于 2013-09-19T09:39:54.333 回答