gpt4 book ai didi

ios - 在回调函数上设置 uilabel

转载 作者:行者123 更新时间:2023-11-28 17:43:13 25 4
gpt4 key购买 nike

我想在 cfsocket 的回调上设置 uilabel 的文本,但它不起作用。错误是:“使用未声明的标识符‘标签’”但是这个 setText 可以在其他函数中使用,为什么不能在这个函数中使用?

回调函数:

static void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
UInt8 *buff;

NSLog(@"%ld",CFDataGetLength(data));

CFDataGetBytes(data, CFRangeMake(0, CFDataGetLength(data)), buff);

NSLog(@"%s",buff);

[label setText:@"toto"];
}

setText 工作的函数:

- (IBAction)deconn:(id)sender
{
if (conn_ok && socket && sock_addr) {
CFSocketInvalidate(socket);
[label setText:@"disconnected"];
conn_ok = false;
[sock_addr release];
}

}

好的,我已经在我的函数中这样做了:

socketViewController *toto = (id)info;
[toto.label setText:@"received msg"];

但它不起作用,我收到 en EXEC_BAD_ACCESS,我在日志中有这个:

sharedlibrary apply-load-rules all
warning: Unable to restore previously selected frame.
(gdb)

我认为这是一个内存访问问题,我在函数末尾添加了 toto = nil; 但没有任何变化。

最佳答案

receiveData 是函数,不是方法。您正在尝试访问对象的私有(private) ivar。如果您使用访问器 (self.label),这会更清楚。使用访问器。

您可以使用 info 指针将 self 传递给回调,以便您可以访问标签。

要配置info指针,您需要在创建套接字时传递一个上下文:

CFSocketContext context = { 0, self, NULL, NULL, NULL };

现在在您的 CFSocketCreate... 调用中,您将传递 &context 作为上下文参数。

与其实现您自己的 CFSocket,我通常推荐 cocoaasyncsocket .它提供了一个更简单的界面。

关于ios - 在回调函数上设置 uilabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277820/

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