Создание класса времени выполнения в iPhone - PullRequest
2 голосов
/ 11 февраля 2011

Мне нужно разделить мою работу с моим партнером по разработке игровых этапов, и нам крайне необходимо использовать plist.Итак, скажем, у меня есть 20 различных типов классов, из которых мне нужно динамически создавать объекты во время выполнения.Определенный класс будет выбран из входных данных plist, и объект класса будет создан на лету.

Первое, что пришло мне в голову, было switch(), и я думаю, это было немного устаревшим.

Поэтому я искал Stack Overflow и понял, что в iOS было NSClassFromString и objc_getclass.

После нескольких попыток я могу сказать, что NSClassFromString действительно хорош, так как я могу просто сказать, какой класс я хочу заранее в plist и bam!там мы идем.Установка свойств объекта выполняется с помощью словаря KeyValue после этого, и все это делается как по волшебству.

Мой вопрос: как я могу вызывать методы класса (те, которые начинаются с +), если вы собираетесь создавать объекты таким образом?Я посмотрел документы и есть NSSelectorFromString().Но не для примера, а для класса?

Ответы [ 2 ]

5 голосов
/ 11 февраля 2011

NSClassFromString возвращает объект класса, а не экземпляр класса. Например:

Class dateClass = NSClassFromString(@"NSDate"); //get the class object

NSDate *dateInstance = [dateClass date]; //call a class method on the class object
2 голосов
/ 11 февраля 2011

Вы можете позвонить performSelector: в классе.

Например, вы можете позвонить:

[NSClassFromString(@"UIViewController") performSelector:NSSelectorFromString(@"setToolbarItems:")]
...