我正在做一个大型 iOS 项目,设计并不像我希望的那样好,但我必须坚持下去。 (生活有时会很糟糕)。
问题是我们有一个基本上可以让您浏览目录的图书馆。您有一个过滤器,您可以在其中指定特定的搜索条件,并且您会看到一个列表,您可以按您感兴趣的项目。当你按下一个项目时,你可以看到它的更详细的描述。
这家公司的工作是向许多拥有不同目录的不同公司销售相同的软件。这个想法是该库具有所有主要功能,并且使用它的项目可能会以某种方式扩展或完全覆盖某些给定的接口(interface)。
举个例子,假设我的图书馆有 2 个管理 2 个 View 的类。它们将是“FilterViewController”和“DetailsViewControllers”。在代码的某些地方,这个类被实例化了。它看起来像这样
我的做法是这样的:
ProjectA面
// Here I configure the library
Library.FilterViewClass = ProjectAFilterViewController;
Library.DetailsViewClass = ProjectADetailViewController;
项目B方
Library.FilterViewClass = ProjectBFilterViewController;
Library.DetailsViewClass = nil;
库端
// Did the user configure the library?
if(self.FilterViewClass == nil){
// I alloc the default ViewController
myFilterViewController = [[FilterViewController alloc] init];
}else{
// Here I would like to alloc the custom ViewController
myFilterViewController = [[Library.FilterViewClass alloc] init]; // DaProblem!
}
该方法的问题是我实际上不知道是否可以通过编程方式实例化对象。或者至少我不知道怎么做。也许我使用了错误的方法,我们将不胜感激。提前发送!
最佳答案
要从字符串中获取类,您可以使用此函数
Class cl = NSClassFromString(@"MyClass");
要获取现有变量的类,只需调用 class
方法即可。
Class cl = [obj class]; // assuming obj1 is MyClass
现在你可以创建MyClass
的实例了
MyClass *myClass = (MyClass*)[[cl alloc] init];
...
[myClass release];
关于objective-c - 在 iOS 中以编程方式实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259896/