I have 4 buttons on main screen, each one sends me to a viewController. The third one, sends me to a view on which I wanna set the managedObjectContext. If I use the class name to create an instance, it’s all right. But I’m looking for a way to use just one method that uses an array to retrieve the name of the Class for the needed viewController. But it’s leading to an error message, like it doesn’t exist on the destination viewController??? Anyone have any ideas about this aproach??? Thanks in advance!
Here is the code:
NSArray *viewControllers = [[NSArray alloc]
initWithObjects:@"nil",@"OpcoesView",@"nil",@"TheNames", nil];
NSString *viewName = [viewControllers objectAtIndex:[sender tag]]; //the taped button tag
UIViewController *viewController = [[NSClassFromString(viewName) alloc]
initWithNibName:viewName bundle:nil];
if ([sender tag] == 3) {
viewController.managedObjectContext = contexto;
}
You do not need to know the subclass at all. Because Objective-C is a dynamic language and messages are resolved at runtime, you can send the message without having to know anything about the subclass at all.
First I would refer to the subclass as an
id(instead of UIViewController) and as long as you have its header imported you can call[viewController setManagedObjectContext:contexto]directly.However if you don’t want to or can’t import the header then just use KVC as follows: