Отражение в Objective-C (iPhone) - PullRequest
       1

Отражение в Objective-C (iPhone)

1 голос
/ 22 октября 2010

Я хочу заполнить [класс MyClass] из строки JSON.

Я использую json-framework для получения NSDictionary, и его очень легко создать, а setValue: forKey: ... для моего объекта данных.

Но для более сложных объектов данных с классами в качестве членов MyClass,

есть:

MyOtherClass *classNoTwo

Я пытался с

Class test = object_getClass(myClass.classNoTwo);
id foo = [[test alloc] init];

Но foo это ноль / ноль. Единственный способ, который я нашел, чтобы обойти это, заключается в том, чтобы в моем методе init MyClass выделить для него память, а затем заменить ее.

Я также хотел бы знать, как избавиться от ссылки myClass.classNoTo, поскольку я не должен знать все свойства в моем общем синтаксическом анализаторе.

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

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 22 октября 2010

Попробуйте вызвать class_getProperty() для доступа к свойству с определенным именем, а затем property_getAttributes() для свойства, возвращаемого первой функцией.Это вернет строку, которая кодирует атрибуты свойства, включая тип.Формат строки объясняется в Свойство Тип Строки в документации.

Наконец, когда вы получили тип свойства, используйте NSClassFromString() для создания экземпляра объекта.

Также см. Документы для двух упомянутых функций для получения более подробной информации.

0 голосов
/ 22 октября 2010

Я написал очень простой контейнер внедрения зависимостей, который называется Factory . Я не понимаю ваш вопрос полностью, но проблемы, которые мы решаем, выглядят похоже. Посмотрите на мои источники, они очень просты и должны помочь вам начать. Возможно, вас заинтересует особенно класс ClassAnalyzer . Это просто взлом, но вы сможете получить оттуда то, что хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...