In the following code, I used NSClassFromString to convert say an NSString “ColorFilter” to class name ColorFilter. The result ColorFilter class does not seem to associate with the class defined in my header file in the import statement with the same name.
in my .h file:
#import "ColorFilter.h" //ColorFilter is a subclass of UIViewController which also has an iVars name imageView of UIImageView class
in my .m file:
NSString *filter = @"ColorFilter";
UIViewController *myFilterClass = [[NSClassFromString(filter) alloc] initWithNibName:filter bundle:nil];
The error I got from the line above was [ColorFilter initWithNibName:bundle:]: unrecognized selector sent to instance…
For testing, I modified the last line to be:
UIViewController *myFilterClass = [[NSClassFromString(filter) alloc] init];
myFilterClass.imageView = .....;
Now the error I got was -[ColorFilter setImageView:]: unrecognized selector sent to instance…
My conclusion is that the ColorFilter class that was produced by NSClassFromString does not know anything about this #import “ColorFilter.h”.
Any idea what my mistake was?
I discovered that one of my static library already has the “ColorFilter” class defined.
It looked like at compile-time, one can overwrite a existing class in the static library. But at run-time, the classes in static library have precedence over dynamically generated classes.