在我的应用程序中,我将用户首选项(适用于所有用户)存储到 plist 文件中, 它以 bundle 形式附加。
问题是,它在管理模式下运行良好,但是当我运行应用程序时,它没有写入文件。我是否需要设置一些属性才能以本地模式写入 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];
}
最佳答案
默认情况下,应用程序包只能由所有者写入(如果它是通过拖到应用程序文件夹中安装的,则这将是安装它的人;如果它是由 .pkg 安装的,则可能应该是 root) 。如果我正确遵循的话,您这样做的方式需要用户对应用程序的 Contents/Resources 文件夹具有写入权限,这是一个非常糟糕的主意(并不是闻所未闻 - 请参阅犹他大学的 documentation about "Poorly-Made Applications"例子)。实际上,在应用程序内部保存首选项无论如何都是一个坏主意。这就是各种 Library/Preferences 文件夹的用途(~/Library/Preferences 用于个人设置,/Library/Preferences 用于系统范围的设置。但是,当然,/Library/Preferences 只能由管理员写入(有很好的理由) .我真的不知道处理这个问题的好方法,因为非管理员可修改系统范围的设置并不完全正常。
关于objective-c - 在本地模式与管理模式下编写 plist 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605986/