我有一个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;
答案 0 :(得分:1)
问题是你在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) {
}
}
(可能你可能需要一些桥接指令来编译而没有错误或警告;我在编写本书时无法测试它。)