You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSClassFromString调用fetchCloudValues提示GIDSignIn无该selector编译错误

问题原因
  • Objective-C 编译器对Class类型变量调用方法时,无法确定方法返回值的具体类型,会全局匹配所有同名的已知 selector。由于你的项目中GIDSignIn类存在同名的sharedInstance类方法,编译器错误将此处[asdasd sharedInstance]的返回值推断为GIDSignIn *类型,因此调用fetchCloudValues时抛出了GIDSignIn不存在该 selector 的错误。
  • 你没有将自定义 Swift 类的接口暴露给当前 Objective-C 代码所属的 target,编译器不知道Test类存在对应的fetchCloudValues方法,无法做正确的类型校验。
  • 如果你编写这段 Objective-C 代码的 target 和CheckUpdate类归属的 target 不一致,运行时NSClassFromString(@"Test")也会返回 nil,即使编译通过也无法正常执行逻辑。
解决方案

你可以根据自己的项目需求选择以下任意一种方案解决:

  1. 统一 target 归属
    检查CheckUpdate类的成员归属,确保它被加入到编写这段 Objective-C 代码的 target 中,否则运行时无法找到对应的类。
  2. 暴露 Swift 类接口给 Objective-C
    在编写这段 OC 代码的文件顶部导入当前 target 自动生成的 Swift 桥接头,格式为:
#import "你的Target名称-Swift.h"

如果不想导入整个桥接头,也可以在 OC 文件顶部手动声明类接口:

@interface Test : NSObject
+ (instancetype)sharedInstance;
- (void)fetchCloudValues;
@end
  1. 规避编译器类型推断问题
    如果不想暴露类接口,仅需要解决编译报错,可以修改调用代码,避免编译器错误匹配类型:
Class asdasd = NSClassFromString(@"Test");
if (asdasd) {
   id instance = [asdasd sharedInstance];
   [instance performSelector:@selector(fetchCloudValues)];
}

内容的提问来源于stack exchange,提问作者Tiziano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:06:02