У меня есть словарь, который содержит имя строки класса в качестве ключа и массив соответствующих объектов класса в качестве значения.Назначение динамического типа класса
Это может быть несколько разных типов классов, которые входят, поэтому я хотел выполнить динамическое назначение во время выполнения.
Кто-нибудь знает, почему этот код дает ошибку компилятора?
// Where obj is an object of type MyClass
Class myClass = NSClassFromString(@"MyClass");
myClass *objectOfTypeMyClass = obj;
Update:
Вот как я в конечном итоге его реализации:
Class interestClass = NSClassFromString(classProvidedAsString);
id interest = [interestClass createNewInterestUsingManagedObjectContext:backgroundContext];
[interest setValue:title forKey:@"title"];
[interest addLikedByObject:aFriend];
Где название является собственностью на все объекты, которые я могу принять, и createNewInterest способ все объекты имеют.
Проблема заключалась в том, чтобы использовать id как interestClass для использования свойств и методов этого класса.
То, что вы хотите, невозможно. 'NSStringFromClass()' - это функция, которая будет оцениваться во время выполнения - вы хотите, чтобы информация была доступна во время компиляции. Если все объекты отвечают на одни и те же методы, тогда вы можете использовать «протокол» для достижения этого –
. Я использовал идентификатор и протокол, чтобы гарантировать, что все они ответили на определенное сообщение. Я использовал Class myClass = NSClassFromString (@ "MyClass"); для его создания, а kvc - для установки свойств. Все хорошо, спасибо! –
Вы использовали 'протокол' и' KVC'? если вы использовали протокол, то «KVC» не требуется, и, используя его, вы теряете возможность проверки компилятора с помощью «протокола», поэтому вы также можете не использовать «протокол». –