NSArray writeToFile, возвращающий «не рекомендуется» - iPhone SDK - PullRequest
2 голосов
/ 15 июля 2010

Я пытаюсь сохранить некоторые настройки из моего приложения в plist-файле при его закрытии, а затем загрузить их при запуске приложения. У меня есть 4 числа, сохраненные в массиве NSArray. Загрузка работает нормально, потому что, если я изменяю файл, приложение запускает способ, которым файл был изменен.

Этот код отлично работает:

- (void)LoadSettings {
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:finalPath];
clockFaceImageSlider.value = [[array objectAtIndex:0] integerValue];
HourTypeSwitch.on = [[array objectAtIndex:1] integerValue];
touchRotationSwitch.on = [[array objectAtIndex:2] integerValue];
accelerometerRotationSwitch.on = [[array objectAtIndex:3] integerValue];
}

Этот код работает до строки сохранения:

- (void)SaveSettings {
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation];
    NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:clockFaceImageSlider.value], [NSNumber numberWithInt:HourTypeSwitch.on], [NSNumber numberWithInt:touchRotationSwitch.on], [NSNumber numberWithInt:accelerometerRotationSwitch.on], nil];

    if (![array writeToFile:finalPath atomically:YES]) {
        NSLog(@"error");
    }
    //The log does print error
}

Кто-нибудь знает, как я могу сохранить его в plist?

~ спасибо

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

Не пишите описание массива NSString, просто запишите вместо этого массив:

[array writeToFile:finalPath atomically:YES];

Или, если вам нужны строки, вы должны использовать кодировку типа

NSError *error;
[[array description] writeToFile:finalPath atomically:YES encoding:NSUTF8StringEncodingerror:&error];

но это не напишет плист.

2 голосов
/ 15 июля 2010

Вместо того, чтобы брать description (который является NSString) NSArray и записывать его в файл, просто используйте writeToFile:atomically из NSArray, как в

[array writeToFile:finalPath atomically:YES];

Причина writeToFile:atomically: NSString устарела в том, что он неправильно учитывает кодировки символов.Кто сказал вам использовать description?Этот человек / книга должны быть наказаны ...

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

[[NSUserDefaults standardUserDefaults] setObject: ... forKey:@"..."]

, и фреймворк делает все, начиная от подготовки пути к списку компонентов и заканчивая его сохранением на диск.

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