在我的应用程序中,我将用户首选项(适用于所有用户)存储到plist文件中, 作为一种捆绑形式附加。
问题是,它在管理模式下运行正常,但是当我运行应用程序时,它没有写入文件。我是否需要设置一些属性以在本地模式下写入plist?或者根本不可能?
我写的文件代码如下:
-(void)SavePrefrence:(NSString *)fileName PrefrenceOption:(NSMutableDictionary *)pDict{
NSString *filePath = [[[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"] retain];
NSDictionary *pTemp = [[NSDictionary alloc]initWithDictionary:pDict];
bool bRet = [pTemp writeToFile:filePath atomically:YES];
if(bRet==YES){
NSLog(@"File Saved ");
}
else {
NSLog(@"File not saved ");
}
}
这是调用它的代码:
-(void)SaveListSettings:(NSMutableDictionary *)pListSettings{
[ self SavePrefrence:@“MyList" PrefrenceOption:pListSettings];
if(pListInfo)
[pListInfo release];
[self LoadListProfile];
}
答案 0 :(得分:3)
默认情况下,应用程序包只能由所有者写入(如果通过拖动到Applications文件夹安装它,那么无论是谁安装它;如果它是由.pkg安装的,它应该是root用户) 。你这样做的方式,如果我正确地遵循它,需要用户具有对应用程序的Contents / Resources文件夹的写入权限,这是一个非常糟糕的想法(不是它闻所未闻的 - 请参阅犹他大学的{{ 3}}例如)。实际上,无论如何,在应用程序中保存首选项是一个坏主意;这就是各种Library / Preferences文件夹的用途(〜/ Library / Preferences用于个人设置,/ Library / Preferences用于系统范围的设置。但是,当然,/ Library / Preferences只能由管理员写入(出于很好的理由)我真的不知道如何处理这个问题,因为非管理员可修改的系统范围设置并不完全正常。
答案 1 :(得分:0)
您可以使用安装程序要求输入管理员密码,然后创建“/ Library / Application Support / MyApp”,然后使这个世界可写,或者在其中创建一个世界可写的子文件夹。现在,在非管理员帐户下运行的MyApp仍然可以写入此共享文件夹。
如果您不想使文件夹成为可写入的文件夹,那么请在捆绑包中包含一个帮助应用程序以进行编写,并使用安装程序生成帮助程序setuid root,该安装程序要求输入管理员密码...
顺便说一句:这两个选项都将失败Mac App Store规则。也许你可以使用'/ Users / Shared',但我不知道它是否被MAS允许,无论如何它远非标准。这会让你把它存放在网络服务器上......