2012-05-23 3 views
2

Я создал одно приложение, которое может анализировать данный XML-файл независимо от его тегов. Он работает хорошо и хорошо для одного уровня XML-файла списка. Я хочу назначить значения xml для объекта. Поскольку xml может быть другим, класс также должен быть общим и членами данных. Я могу получить общие члены данных, используя идентификатор типа данных. Но проблема в другом. Xml может иметь различное количество типов данных. так можно ли решить количество членов данных во время выполнения? (здесь я загружаю xml два раза в любом случае полезен для достижения нашей цели?)Динамическая генерация элементов данных

ответ

0

Key-Value Coding отлично соответствует вашим потребностям, вы можете использовать NSMutableDictionary, если хотите что-то быстрое & просто.

+0

не могли бы вы уточнить, как kvc может выполнить мое требование. –

+0

Путь ключей с 'valueForKeyPath:' и 'setValue: forKeyPath:' поможет вам сохранить анализируемую структуру 'xml' в одном объекте. Для вашего случая я бы использовал Ассоциативные ссылки для реализации протокола: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocAssociativeReferences.html Или словарь словарей словарей ... это выглядит не очень элегантно. –

0

Прибытие сюда из another question of the OP's. Чтобы подробно ответить на ответ A-Live:

Если объект является всего лишь универсальным держателем значений, то вы должны просто использовать NSMutableDictionary. Нет никакой особой необходимости использовать KVC для этого, хотя он работает.

Если у объекта есть некоторые фиксированные свойства плюс произвольное количество специальных свойств или если у него должно быть какое-то поведение в дополнение к сохранению значений, вы можете обернуть NSMutableDictionary в пользовательский класс. В этом случае ваш пользовательский класс реализует -valueForUndefinedKey: для извлечения значений из словаря, когда ключ не соответствует ни одному из обычных свойств класса. Аналогично, он будет реализовывать -setValue:forUndefinedKey:, чтобы разрешить установку специальных свойств, сохраняя их в словаре.

Как только оба этих метода определены, клиент класса может использовать KVC для получения и установки значений свойств, используя -valueForKey: и -setValue:forKey:.

Любой из методов «неопределенного ключа», которые вы реализуете, может быть полностью разрешен, передавая все ключи всем словарям, или они могут проверять ключ на список разрешенных/известных свойств. Этот список все равно будет установлен во время выполнения, а не фиксирован во время компиляции, но, если у вас есть эта информация откуда-то, он устанавливает немного дополнительной безопасности. Для неизвестных/запрещенных ключей просто перейдите к выполнению super.

Оба метода - более вероятно, сеттер - также могут реализовать поведение, относящееся к специальным свойствам, если хотите.

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