我正在开发一个mac应用程序,我想将我的设置(字符串数组)放入一个文件中。如果该文件与应用程序存在于同一文件夹中,则会覆盖默认设置。
编写文件时没有问题,但在使用代码阅读时没有问题:
NSArray* settingsInput = [[NSArray alloc] initWithContentsOfFile:@"./SettingsFile"];
发生了一些奇怪的事情。从XCode运行应用程序时(设置文件位于应用程序旁边的build / debug文件夹中)设置被读取没有问题。当我存档应用程序并从桌面运行它时,无法加载该文件。即使我将应用程序从构建文件夹复制到桌面也无法正常工作。
这种行为可能是什么原因?我该如何阅读此文件?
答案 0 :(得分:3)
使用普通的prefence系统可能是一个更好的主意。 NSUserDefaults的。
有几种方法可以做到。 但我们的想法是为您的应用程序提供一组默认首选项,这些首选项在正确的域中注册并始终使用新的应用程序。
使用 registerDefaults :来自 NSUserDefaults 。
请参阅Apples文档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" ]);
除非您对其进行更改,否则不会将这些默认首选项写入文件/输出。通过写入文件我的意思是应用程序首选项文件。一旦你对它们进行了更改,那么它们将被写入用户首选项,这些将从那时开始使用。
答案 1 :(得分:2)
您不应该依赖应用的当前目录。您应该从应用程序包中读取(请参阅NSBundle
类以获取正确的路径)或应用程序的文档目录(请参阅NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ...
)。
答案 2 :(得分:1)
当前工作目录的UNIX概念在Mac桌面应用程序中并不常用。通过Finder启动应用程序时,通常会将其设置为启动卷的根目录。
您应该找到另一种方法来确定设置文件的位置。好点是~/Library/Preferences
或~/Library/Application Support/MyApp
。您可以使用以下命令获取这些目录的绝对路径:
NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomain, YES)[0];