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

ObjC编译器提示协议中无setValue:方法,求问题排查

问题:调用ObjC协议方法时出现编译错误

我定义了如下ObjC协议:

#import <Foundation/Foundation.h>

@protocol FutureObjC

- (void)setValue: (NSObject *_Nullable)data NS_SWIFT_NAME(setValue(_:));
- (void)setError: (NSError *_Nullable*_Nullable)error NS_SWIFT_NAME(setError(_:));

@end

同时写了一个ObjCpp类方法,接收遵循该协议的对象:

- (void)__method:(_Nonnull id<FutureObjC>)future
{
    [future setValue: nil];
}

但编译时报错,提示协议里找不到该方法:

/Users/ga.igumnov/work/sdk/build/x86_64/test/tests/test-sbis-djinni-static/src/async/djinni/objcpp/TestSBISDjinniAsync/DSAsyncTestInterface+Private.mm:94:13: error: instance method 'setValue:' not found ; did you mean 'getValue:'?
94 | [future setValue: nil];
| ^

请问我哪里错了?


解决方案

这个错误的核心原因是定义FutureObjC协议的头文件没有被正确导入到你的ObjCpp文件中,编译器看不到协议里的方法声明,所以报错。

你需要做的是:

  • 在你的.mm文件顶部,用#import导入包含FutureObjC协议的头文件。比如协议定义在FutureObjC.h里,就添加:
    #import "FutureObjC.h"
    
  • 确认头文件路径正确,编译时能被编译器找到,没有路径错误或者遗漏引用的情况。
  • 排查是否存在命名冲突,比如有没有其他同名协议或方法干扰了当前声明。

只要确保协议声明被正确导入,编译器就能识别setValue:方法,解决这个编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:49:55