Ответ 1
Для создания экземпляра класса с использованием его имени вы можете использовать NSClassFromString:
id obj = [[NSClassFromString(@"MySpecialClass") alloc] init];
Моя проблема в следующем. У меня есть метод, который просто берет фрагмент XML и XPath. Затем он должен создать мне массив объектов для этого фрагмента XML. Значение, если мне передают следующий XML:
<user>
<name>Bob</name>
<age>50</age>
</user>
Мой метод будет инстанцировать экземпляр класса User и использовать ключевое значение-кодирование для установки переменных экземпляра. Это довольно прямолинейно. Единственная проблема заключается в том, что я получаю, главным образом, скриптовый фон и пытаюсь выяснить, возможно ли передать метод имя класса. Сейчас он выполняет класс User, позже это может быть класс Cars, а затем класс Home. Каков наилучший способ создания объектов из этого метода разного типа, сохраняя при этом код максимально абстрактным?
Для создания экземпляра класса с использованием его имени вы можете использовать NSClassFromString:
id obj = [[NSClassFromString(@"MySpecialClass") alloc] init];
Классы - это объекты и могут использоваться/отправляться так же, как и другие объекты.
Чтобы создать объект класса:
Class classForElement = [MyUserClass class];
Чтобы создать экземпляр объекта этого класса
id newObject = [[classForElement alloc] init];
Если имя класса не совпадает с именем элемента, создайте словарь с классом как объектом и именем элемента в качестве ключа.
[NSDictionary dictionaryWithObjectsAndKeys:
[MyUserClass class], @"user",
[MyCarClass class], @"car",
[MyHomeClass class], @"home",
nil]];
Вы хотите подробно изучить Core Data. Управляемые объекты могут прийти на помощь.
В CocoaDevCentral есть несколько статей, но вам, вероятно, нужны документы Apple.
http://cocoadevcentral.com/articles/000086.php
[edit] Мне просто напомнили, что вы делаете это на iPhone. Недоступность базовой базы данных не означает, что вы не можете брать взаймы из нее и просто переопределять то, что вам нужно. Одна из OpenStep с открытым исходным кодом может иметь код.
На мобильном устройстве вы можете быть осторожны с размером ваших данных.
Эзра Эпштейн во время создания классов (и более):
http://www.macdevcenter.com/pub/a/mac/2002/05/24/runtime_partone.html
Попробуйте использовать id в качестве типа параметра в вашей сигнатуре метода. Объект id может быть введен в тип любого объекта класса
Вы делаете проект для iPhone. Вы используете NSXMLNode. В случае, если вы, пожалуйста, имейте в виду, что использование NSXMLNode будет разрешено только на симуляторе. Он не будет работать на iPhone, поскольку NSXMLNode является частью основной библиотеки.