来自 NSClassFromString 的自定义初始化

Custom init from from NSClassFromString

我尝试动态调用某些 viewController/Feature 取决于他的名字。NSClassFromString
(这种想法是由 Facebook 提出的)。 对于来自我的服务器的实例,我可以在 IOS 应用程序中定义应该使用哪个功能或 viewController。(或 On/Off 它们)
我搜索了整个 Stack,但仍然找不到一种优雅的方式来实现我想要的

   Class myclass = NSClassFromString(className);
   id obj = [[myclass alloc] init];

会起作用。
但我想调用我的自定义初始化。

Class myclass = NSClassFromString(className);
id obj = [[myclass alloc] initWithCostumInitializer:userInfo];

我找不到合适的方法。当然,每次我收到一个错误,因为 initWithCostumInitializer 不是 recognised.So 我需要在 运行 time.I 中做出决定相信我错过了一些东西。

非常感谢。

首先,如果 headers 对于可能的 classe,你不应该得到关于未知方法的 compile-time 错误(s) 导入到 .m 文件中,此代码为 运行。正是由于这种动态性,ObjC 应该允许您在 object 类型 id 上调用相当任意的方法。

但这只是创可贴解决方案。真的,如果您知道存在自定义初始化方法,那么它就不是任意的 class,对吧?您知道它是什么类型的 object,或者至少知道它派生自什么类型的基础 class,否则您将不知道调用该方法。所以你总是可以:

id customObj = [((BaseViewController *)[myclass alloc]) initWithCustumInitializer:userInfo];

如果您的错误是关于接收器缺少该选择器的 运行时 错误,那么您遇到了一个真正的问题,即:为什么要在 object 可能不是那种有那种方法的 object?如果是这种情况,您需要首先查看 class 以弄清楚您实际要创建什么样的东西,然后针对初始化。