gpt4 book ai didi

ios - 来自 NSClassFromString 的自定义初始化

转载 作者:行者123 更新时间:2023-11-28 19:52:06 24 4
gpt4 key购买 nike

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

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

会起作用。
但我想调用我的自定义 init。

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

我找不到合适的方法来做到这一点。当然,每次我收到一个错误,因为 initWithCostumInitializer 没有被识别。所以我需要在运行时做出决定。我相信我错过了一些东西。

非常感谢。

最佳答案

首先,如果将可能类的 header 导入到运行此代码的 .m 文件中,您不应该得到关于未知方法的编译时错误。正是由于这种动态性,ObjC 应该允许您在 id 类型的对象上调用相当任意的方法。

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

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

如果您的错误是关于接收器缺少该选择器的运行时错误,那么您就会遇到真正的问题,即:为什么要在可能不是那种类型的对象上调用命名方法具有该方法的对象?如果是这种情况,您需要首先查看类以弄清楚您实际要创建的是什么类型的东西,然后为 init 做出适当的行为。

关于ios - 来自 NSClassFromString 的自定义初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com