Я создал одно приложение, которое может анализировать данный XML-файл независимо от его тегов. Он работает хорошо и хорошо для одного уровня XML-файла списка. Я хочу назначить значения xml для объекта. Поскольку xml может быть другим, класс также должен быть общим и членами данных. Я могу получить общие члены данных, используя идентификатор типа данных. Но проблема в другом. Xml может иметь различное количество типов данных. так можно ли решить количество членов данных во время выполнения? (здесь я загружаю xml два раза в любом случае полезен для достижения нашей цели?)Динамическая генерация элементов данных
ответ
Key-Value Coding отлично соответствует вашим потребностям, вы можете использовать NSMutableDictionary, если хотите что-то быстрое & просто.
Прибытие сюда из another question of the OP's. Чтобы подробно ответить на ответ A-Live:
Если объект является всего лишь универсальным держателем значений, то вы должны просто использовать NSMutableDictionary
. Нет никакой особой необходимости использовать KVC для этого, хотя он работает.
Если у объекта есть некоторые фиксированные свойства плюс произвольное количество специальных свойств или если у него должно быть какое-то поведение в дополнение к сохранению значений, вы можете обернуть NSMutableDictionary
в пользовательский класс. В этом случае ваш пользовательский класс реализует -valueForUndefinedKey:
для извлечения значений из словаря, когда ключ не соответствует ни одному из обычных свойств класса. Аналогично, он будет реализовывать -setValue:forUndefinedKey:
, чтобы разрешить установку специальных свойств, сохраняя их в словаре.
Как только оба этих метода определены, клиент класса может использовать KVC для получения и установки значений свойств, используя -valueForKey:
и -setValue:forKey:
.
Любой из методов «неопределенного ключа», которые вы реализуете, может быть полностью разрешен, передавая все ключи всем словарям, или они могут проверять ключ на список разрешенных/известных свойств. Этот список все равно будет установлен во время выполнения, а не фиксирован во время компиляции, но, если у вас есть эта информация откуда-то, он устанавливает немного дополнительной безопасности. Для неизвестных/запрещенных ключей просто перейдите к выполнению super
.
Оба метода - более вероятно, сеттер - также могут реализовать поведение, относящееся к специальным свойствам, если хотите.
- 1. MVVM и динамическая генерация элементов управления
- 2. Динамическая генерация платформы уведомлений на основе данных
- 3. iText PDF динамическая генерация
- 4. Динамическая генерация javadoc
- 5. Динамическая генерация запроса обновления
- 6. Динамическая генерация файлов .doc
- 7. Динамическая генерация метод питона
- 8. генерация кода avro/динамическая типизация
- 9. Symfony2: динамическая генерация встроенной формы
- 10. Динамическая генерация тегов в угловых
- 11. Динамическая генерация ViewModel из модели
- 12. Динамическая генерация Гиперссылки в HTML
- 13. Динамическая карта и генерация XML в Groovy
- 14. Динамическая генерация HTML на основе типа объекта
- 15. Динамическая генерация рекурсивного массива данных с использованием CDBCriteria
- 16. Динамическая генерация столбца строки и заголовка
- 17. Генерация перестановок элементов NSArray
- 18. Динамическая генерация CSS не работает в Rails4
- 19. динамическая генерация DataGrid с кодовым за
- 20. Динамическая генерация классов с использованием JAXB
- 21. Динамическая генерация 2D-сетки с заголовками
- 22. Джанго: динамическая генерация формы (изменение типа поля)
- 23. Struts2 Динамическая генерация гиперссылок с использованием Arraylist
- 24. Динамическая генерация Imagecache с вычисленным полем cck
- 25. РЕЛЬСЫ 4 Динамическая генерация выбора тега
- 26. Динамическая генерация диаграммы: JS, JQuery, CSS
- 27. Динамическая генерация полей для пользовательского типа контента
- 28. C# динамическая компиляция и генерация кода
- 29. Динамическая генерация кнопок с событием click
- 30. Динамическая генерация тестов для на ActiveSupport :: Концерн
не могли бы вы уточнить, как kvc может выполнить мое требование. –
Путь ключей с 'valueForKeyPath:' и 'setValue: forKeyPath:' поможет вам сохранить анализируемую структуру 'xml' в одном объекте. Для вашего случая я бы использовал Ассоциативные ссылки для реализации протокола: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocAssociativeReferences.html Или словарь словарей словарей ... это выглядит не очень элегантно. –