objective-c - 在本地模式与管理模式下编写 plist 时出现问题

标签 objective-c cocoa macos plist bundle

在我的应用程序中,我将用户首选项(适用于所有用户)存储到 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/

相关文章:

macos - 如何在 Mac 上完整(具有所有功能 - ACL 支持/Xattr 支持/xxhash 库/zstd 库)安装(编译)rsync v3.2.3?

php - 从 iPhone 应用程序将图像上传到服务器 PHP 脚本

objective-c - 我关闭的 NSWindow 在哪里?

objective-c - 特定字符串和 NSScanner

iphone - 在 CATiledLayer 中预加载/预显示图 block ?

ios - 仅在单元测试中对协议(protocol)的冗余一致性

python - 在 Mac 上为 Python 2.6 安装 pygobject

用于同步用户事件的 iOS 网络技术

iphone - UIButton 渐变不起作用

iphone - 如何在移动时调整 UIView 的大小,就像 SnapGuide 一样?