-writeToFile: автоматически: (NSDictionary) не успешно на некоторых учетных записях пользователей - PullRequest
0 голосов
/ 27 августа 2011

Я создаю NSDictionary (+ dictionaryWitContentsOfFile :), изменяю некоторые значения с помощью -setValue: ForKey: и затем, когда приложение завершается, записывает этот словарь обратно в файл с -writeToFile: автоматически. Все прекрасно работает, пока я не открою ту же программу в другой учетной записи пользователя .

Кто-нибудь предчувствовал, что может вызвать эту ошибку?

В документации просто сказано, что -writeToFile: автоматически: возвращает НЕТ, когда некоторые из его значений не подходят для plist. Это определенно не проблема здесь. Все, что я могу сказать на данный момент, - это то, что программа может записать файл, когда я работаю с учетной записью, из которой разрабатываю. На моем Mac есть другая учетная запись пользователя, которая не имеет прав администратора, и там -writeToFile: автоматически возвращает NO (я вижу это в консоли). Я сделал эту учетную запись администратором, но программа по-прежнему не может сохранить там.

Спасибо за любую помощь,

Wolfgang

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 голосов
/ 27 августа 2011

Хорошо, выяснил это. Папка ресурсов приложения не подходит для сохранения чего-либо, потому что большинство пользователей Mac не имеют права писать в папку приложения.

Я сейчас использую

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

вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...