Как записать данные в plist?

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

Вам лучше просто построить строку, перебирая массив.

Вы можете найти удобный для себя метод stringByAppendingString: или stringByAppendingFormat: экземпляр.

16
задан Alex Zavatone 8 December 2017 в 01:26
поделиться

3 ответа

Я не знаю, понимаю ли я ваш вопрос, но если вы хотите написать в .plist в своем пакете .app, вы, вероятно, делает что-то не так. Если вы хотите сохранить настройки, вам следует рассмотреть возможность использования NSUserDefaults .
Если вы действительно хотите изменить связанный .plist - вот некоторый код:

NSString *plistPath = nil;
NSFileManager *manager = [NSFileManager defaultManager];
if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents/Info.plist"]) 
{
    if ([manager isWritableFileAtPath:plistPath]) 
    {
        NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
        [infoDict setObject:[NSNumber numberWithBool:hidden] forKey:@"LSUIElement"];
        [infoDict writeToFile:plistPath atomically:NO];
        [manager changeFileAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] atPath: [[NSBundle mainBundle] bundlePath]];
    }
}

Обновление:
Нейт Флинк указал, что некоторые из методов NSFileManager, использованных выше, устарели. Он опубликовал ответ с описанными ниже методами замены: https://stackoverflow.com/a/12428472/100848

26
ответ дан 30 November 2019 в 16:05
поделиться

Когда вы создаете приложение, оно создает исполняемый файл «appName.app», и все файлы создаются в пакете. Следовательно, вы не можете получить доступ к папке ресурсов во время работы приложения, потому что все данные находятся в пакете (а не в папке).

Однако вы можете получить доступ к временной папке, которая содержит некоторую информацию о приложении. Вы можете найти временную папку здесь: Откройте средство поиска - щелкните свое имя пользователя (в разделе МЕСТА) - Библиотека - Поддержка приложений - Симулятор iPhone - Пользователь - Приложения - (здесь вы можете найти все временные папки приложений iPhone)

Вы можете получить доступ к этой временной папке:


NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

Если вы назовете свой файл save.plist, вы сможете получить к нему доступ следующим образом:

NSString *filePath = [documentsDirectory stringByAppendingString:@"_save.plist"];

Затем вы просто сохраняете свой файл в этот filePath, и он появится во временной папке с именем «Documents_save.plist».

* Обратите внимание, что имя временной папки меняется каждый раз при запуске приложения.

Рекомендовать Книга для вас: 《Начало разработки для iPhone - изучение iPhone SDK》. В главе 11 вы можете найти то, что хотите.

4
ответ дан 30 November 2019 в 16:05
поделиться

Подводя итог некоторым другим ответам:

Проблема в том, что вы пытаетесь записать файл обратно в папку, содержащую ваше приложение. Эта папка недоступна для записи во время выполнения. Все, что вы делаете, в порядке, вам просто нужно выбрать другое место для записи файла.

Вы можете использовать функцию NSSearchPathForDirectoriesInDomains, чтобы найти более подходящую папку для этих данных. (Например, папка @ "Документы".)

4
ответ дан 30 November 2019 в 16:05
поделиться