Чтение и запись данных списка свойств
Используя методы Objective C, чтобы читать и записать данные списка свойств
У Вас есть два главных способа записать данные списка свойств в файловую систему:
Если корневой объект списка свойств
NSDictionaryилиNSArrayобъект — который почти всегда имеет место — можно вызватьwriteToFile:atomically:илиwriteToURL:atomically:методы тех классов, передающих в корневом объекте. Эти методы сохраняют график объектов списка свойств как список свойств XML перед выписыванием что как ресурс URL или файл.Для чтения данных списка свойств назад в программу инициализируйте выделенный объект коллекции путем вызова
initWithContentsOfFile:иinitWithContentsOfURL:методы или соответствующие методы фабрики классов (например,dictionaryWithContentsOfURL:).Можно сериализировать объекты списка свойств к
NSDataобъект с помощьюdataFromPropertyList:format:errorDescription:метод класса и затем сохраните тот объект путем вызоваwriteToFile:atomically:илиwriteToURL:atomically:методыNSDataкласс.Для чтения данных списка свойств назад в программу сначала инициализируйте выделенный
NSDataобъект путем вызоваinitWithContentsOfFile:илиinitWithContentsOfURL:или вызовите соответствующий метод фабрики классов такой какdataWithContentsOfFile:. Тогда вызовитеpropertyListFromData:mutabilityOption:format:errorDescription:метод классаNSPropertyListSerialization, передача в объекте данных.
Первый подход более прост — требуется только один вызов метода вместо два — но второй подход имеет свои преимущества. Это позволяет Вам преобразовывать список свойства времени выполнения в двоичный формат, а также список свойств XML. При преобразовании статического представления списка свойств назад в график объектов это также позволяет Вам указать с большей гибкостью, являются ли те объекты непостоянными или неизменными.
Чтобы подробно остановиться на этой последней точке, рассмотрите этот пример. У Вас есть список свойств XML, корневой объект которого NSArray объект, содержащий много NSDictionary объекты. Если Вы загружаете тот список свойств этим вызовом:
NSArray * a = [NSArray arrayWithContentsOfFile:xmlFile]; |
a неизменный массив с неизменными словарями в каждом элементе. Каждый ключ и каждое значение в каждом словаре являются также неизменными.
Если Вы загружаете список свойств этим вызовом:
NSMutableArray * ma = [NSMutableArray arrayWithContentsOfFile:xmlFile]; |
ma непостоянный массив с неизменными словарями в каждом элементе. Каждый ключ и каждое значение в каждом словаре являются неизменными.
При необходимости в управлении с более прекрасными зернами переменчивостью объектов в списке свойств используйте propertyListFromData:mutabilityOption:format:errorDescription: метод класса, второй параметр которого разрешает Вам указывать переменчивость объектов на различных уровнях совокупного списка свойств. Вы могли указать, что все объекты являются неизменными (NSPropertyListImmutable), то единственное контейнер (массив и словарь) объекты является непостоянным (NSPropertyListMutableContainers), или что все объекты являются непостоянными (NSPropertyListMutableContainersAndLeaves).
Например, Вы могли записать код как это:
NSMutableArray *dma = (NSMutableArray *)[NSPropertyListSerialization |
propertyListFromData:plistData |
mutabilityOption:NSPropertyListMutableContainersAndLeaves |
format:&format |
errorDescription:&error]; |
Этот вызов производит непостоянный массив с непостоянными словарями в каждом элементе. Каждый ключ и каждое значение в каждом словаре являются самостоятельно также непостоянными.
Используя базовые функции основы, чтобы читать и записать данные списка свойств
Чтобы выписать использованию списков свойств XML Property List Services (Базовая Основа), вызовите функцию CFURLWriteDataAndPropertiesToResource функция, передавая объект CFData создается посредством вызова CFPropertyListCreateXMLData. Для чтения списка свойств XML из файловой системы или ресурса URL вызовите функцию CFURLCreateDataAndPropertiesFromResource. Тогда преобразуйте создаваемый объект CFData в график объектов списка свойств путем вызова CFPropertyListCreateFromXMLData функция.
Перечисление 6-1 включает фрагмент большего примера кода в Сохранении и Восстановлении Списка свойств в Базовой Основе, иллюстрирующей использование этих функций.
Перечисление 6-1 Пишущие и читающие списки свойств с помощью Базовых функций Основы
void WriteMyPropertyListToFile( CFPropertyListRef propertyList, |
CFURLRef fileURL ) { |
CFDataRef xmlData; |
Boolean status; |
SInt32 errorCode; |
// Convert the property list into XML data. |
xmlData = CFPropertyListCreateXMLData( kCFAllocatorDefault, propertyList ); |
// Write the XML data to the file. |
status = CFURLWriteDataAndPropertiesToResource ( |
fileURL, // URL to use |
xmlData, // data to write |
NULL, |
&errorCode); |
CFRelease(xmlData); |
} |
CFPropertyListRef CreateMyPropertyListFromFile( CFURLRef fileURL ) { |
CFPropertyListRef propertyList; |
CFStringRef errorString; |
CFDataRef resourceData; |
Boolean status; |
SInt32 errorCode; |
// Read the XML file. |
status = CFURLCreateDataAndPropertiesFromResource( |
kCFAllocatorDefault, |
fileURL, |
&resourceData, // place to put file data |
NULL, |
NULL, |
&errorCode); |
// Reconstitute the dictionary using the XML data. |
propertyList = CFPropertyListCreateFromXMLData( kCFAllocatorDefault, |
resourceData, |
kCFPropertyListImmutable, |
&errorString); |
if (resourceData) { |
CFRelease( resourceData ); |
else { |
CFRelease( errorString ); |
} |
return propertyList; |
} |
Можно также записать и считать списки свойств в файловую систему с помощью функций CFPropertyListWriteToStream и CFPropertyListCreateFromStream. Эти функции требуют, чтобы Вы открыли и сконфигурировали чтение и потоки записи сами.