использование plist в программировании iphone - PullRequest
1 голос
/ 12 января 2011

Я прочитал документацию Apple по списку: http://developer.apple.com/library/mac/documentation/cocoa/Conceptual/PropertyLists/PropertyLists.pdf

Однако у меня есть несколько вопросов по этому поводу:

1) Когда мы используем API [dict writeToFile: plistPath atomically: YES], перезаписывает ли оно текущее содержимое plist? В документации ничего не сказано.

2) Должны ли мы на самом деле сделать plist вручную в Xcode с помощью нового файла-> resources-> list свойства? Или мы должны иметь это:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSData *xmlData = [NSPropertyListSerialization  //... a very long line here

if([fileManager fileExistsAtPath:plistPath]) {
    [xmlData writeToFile:plistPath atomically:YES];
}    
else {
    [fileManager createFileAtPath:plistPath contents:xmlData attributes:nil];
}

3) Как мы проверяем, действительно ли мы записали данные в список свойств? Я попробовал продукты -> myapp.app -> "открыть в поиске" -> щелкнуть правой кнопкой мыши -> показать содержимое пакета, и там есть некоторые списки, но я не вижу записываемые данные! Значит ли это, что мне не удалось записать данные в plist?

РЕДАКТИРОВАТЬ: Спасибо всем! Извините за глупость сегодня!

Ответы [ 2 ]

1 голос
/ 12 января 2011

Из описания writeToFile:atomically:

Если флаг YES, словарь записывается во вспомогательный файл, а затем вспомогательный файл переименовывается в path. Если флаг НЕТ, словарь записывается непосредственно в путь. Опция YES гарантирует, что путь, если он вообще существует, не будет поврежден, даже если во время записи произойдет сбой системы.

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

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

Добавьте некоторые записи (например, NSLog(@"plist path: %@", plistPath);), чтобы показать, где пишется plist.

0 голосов
/ 12 января 2011

1) Будет перезаписано текущее содержимое. Если вы хотите добавить еще данные в текущий файл plist, сначала прочитайте их в словарь, добавьте данные и запишите их обратно. 2) Вы можете добавить его вручную или создать его программно. 3) Просто запишите содержимое файла plist после записи.

...