-writeToFile:自动:( NSDictionary)在某些用户帐户上不成功

时间:2011-08-27 03:23:20

标签: nsdictionary user-accounts writetofile

我创建了一个NSDictionary(+ dictionaryWitContentsOfFile :),用-setValue更改了一些值:ForKey:然后,当应用程序终止时,自动将这个字典写回带-writeToFile的文件: 在我在 另一个用户帐户 中打开相同的程序之前,一切都很顺利。

有人预先知道可能导致此错误的原因吗?

文档只是说-writeToFile:自动:当一些值不足以用于plist时返回NO。这绝对不是问题。 我现在可以说的是,当我在我正在开发的帐户时,程序可以写入文件。我的Mac上有另一个用户帐户,没有管理员,而且-writeToFile:自动返回NO(我在控制台中看到这个)。我使该帐户管理员但程序仍然无法保存。

感谢您的帮助,

沃尔夫冈

PS:我想我不能给你更多不冗余的信息。如果你想要更多的东西,这里是代码:

- (void)awakeFromNib
{
    NSString *path = [NSString stringWithFormat:@"%@/%@.plist",[[NSBundle mainBundle] resourcePath],NSUserName()];
    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
    {
        NSLog(@"create new plist");
        path = [[NSBundle mainBundle] pathForResource:@"DefaultAppData" ofType:@"plist"];
    }
    NSLog(@"open path:%@", path);
    myPlist = [NSDictionary dictionaryWithContentsOfFile:path];
}

-(void)changeSomething
{
    [myPlist setValue:[NSNumber numberWithBool:NO]] forKey:@"aKey"];
}


-(void)applicationWillTerminate:(NSNotification*)notification
{
    NSLog(@"dict: %@",myPlist);
    NSString *path = [NSString stringWithFormat:@"%@/%@.plist",[[NSBundle mainBundle] resourcePath],NSUserName()];
    NSLog(@"save at path:%@ successful:%d", path, [myPlist writeToFile:path atomically:YES]);
}

1 个答案:

答案 0 :(得分:0)

好的,发现了。应用程序的资源文件夹不是保存任何内容的正确位置,因为大多数Mac用户无权在应用程序文件夹中写入。

我现在用

NSString *path = [NSString stringWithFormat:@"%@/Library/Preferences/com.myCompany.myApp.plist",NSHomeDirectory()];

代替。