gpt4 book ai didi

CFSocketCallback 中无法访问 iOS 类属性

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:15 28 4
gpt4 key购买 nike

我有一个声明如下的 CFSocket 回调方法:

void socketCallback(CFSocketRef cfSocket, CFSocketCallBackType type, CFDataRef address, const void *data, void *userInfo)
{
if (_scanningInProgress) {

}
}

问题是我收到“使用未声明的标识符‘_scanningInProgress’错误。我有点困惑,因为如果我尝试这样的事情:

-(void)scan:(bool)isScanning
{
_scanningInProgress = isScanning;
}

然后一切正常。是什么导致了错误?这是该属性的 .h 文件声明:

@property bool scanningInProgress;

最佳答案

问题是您在 Objective-C 中使用 C API,并且任何回调函数都需要传递一些信息给它,以便回调函数理解调用它的上下文。在您的情况下,您需要在 CFSocketContext 结构中传递 Objective-C 对象引用并从 info 参数(最后一个)访问它:

创建套接字时:

const CFSocketContext context = { 0, self, NULL, NULL, NULL };
socket = CFSocketCreateWithNative(NULL, sock, kCFSocketReadCallBack,
socketCallback, &context);

并在回调方法中访问它:

void socketCallback(CFSocketRef cfSocket, CFSocketCallBackType type,
CFDataRef address, const void *data, void *info)
{
YourObject *obj = (YourObject *)info;
if (obj.scanningInProgress) {

}
}

(您可能需要一些桥接指令才能在没有错误或警告的情况下进行编译;在撰写本文时我无法对其进行测试)。

关于CFSocketCallback 中无法访问 iOS 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522278/

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