2011-01-12 2 views
1

Я дочитал документацию от Apple из списка свойств: http://developer.apple.com/library/mac/documentation/cocoa/Conceptual/PropertyLists/PropertyLists.pdfс помощью PLIST в iphone программирования

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

1) Когда мы используем [Dict WriteToFile: plistPath атомарно : ДА] API, перезаписывает ли текущий контент plist? Он ничего не говорит в документации.

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

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 -> «показывать в finder» -> щелкните правой кнопкой мыши -> показать содержимое пакета, и там есть некоторые plists, но я не вижу данные, которые пишутся! Это значит, что я не смог записать данные в plist?

EDIT: Спасибо всем! Извините за то, что сегодня глупый!

ответ

1

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

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

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

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

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

+0

Вы не должны использовать ресурс, поскольку вы собираетесь писать ему в ходе выполнения приложения. - Извините, я не понимаю, что вы подразумеваете под этим ... вы говорите о вызове createFileAtPath от NSManager? –

+0

Вы должны найти каталог документов вашего приложения следующим образом: '[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];' и создайте там свой файл. Вы не должны создавать ресурс в Xcode, а затем пытаться записать его из своего приложения. – pwc

+0

Другими словами, ваш каталог ресурсов доступен только для чтения. Вы не должны писать в файл там. – pwc

0

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

Смежные вопросы