gpt4 book ai didi

ios - 我如何暂停10秒以发送输入而不会丢失数据iOS

转载 作者:行者123 更新时间:2023-12-01 16:03:49 28 4
gpt4 key购买 nike

我的一个程序中有一个按钮,当您单击它时,它将向UDP数据包发送一个字符串。接受输入后,需要将字符串发送出10。我遇到的问题是,当我使用NSTimer或[self performSelector:@selector(sendUDPMessage)withObject:nil afterDelay:2.0f]时;最后一个字符串是发送的内容,而不是预期的输入。

当sendUDPMessage函数调用时,我还尝试了几种不同的循环来发送数组中的下一个元素,但是我没有运气。

截至目前,这是我的代码:

- (IBAction)RecordButton:(UIButton *)sender {

NSDateFormatter *clockFormat = [[NSDateFormatter alloc] init];
[clockFormat setDateFormat:@"kk:mm:ss:SSS"];

NSString *myT = [clockFormat stringFromDate:[NSDate date]];
NSString *Str = display.text;

_dataString = [NSString stringWithFormat:@"0, %@, %@, \"%@\"", Str, Str, myT];

//[_updArray addObject:_dataString];

[self performSelector:@selector(sendUDPMessage) withObject:nil afterDelay:2.0f];

[_tableView reloadData];

我在perform for选择器中调用的函数是:
-(void)sendUDPMessage {

data = [_dataString dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:ipSaved port:portSaved withTimeout:-1.0 tag:0];

}

我了解为什么它不起作用。这是因为performselector会暂停发送它,而不是字符串本身。我试图用sendUDPMessage保存字符串,但是会发生相同的问题。

最佳答案

将所需的数据作为参数传递,而不是依赖于实例变量的当前值:

- (void)sendUDPMessage:(NSString *)message {
data = [message dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:ipSaved port:portSaved withTimeout:-1.0 tag:0];
}

并调用:
[self performSelector:@selector(sendUDPMessage:) withObject:[_dataString copy] afterDelay:2.0f];

扩大一点:

没有理由为数据字符串使用ivar。您可以这样做:
NSString *dataString = [NSString stringWithFormat:@"0, %@, %@, \"%@\"", Str, Str, myT];

[self performSelector:@selector(sendUDPMessage:) withObject:dataString afterDelay:2.0f];

正如Martin所指出的,使用GCD更加容易。您可以消除 senUDPMessage:方法,而只需使用 dispatch_after即可。
NSString *dataString = [NSString stringWithFormat:@"0, %@, %@, \"%@\"", Str, Str, myT];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:ipSaved port:portSaved withTimeout:-1.0 tag:0];
});

您甚至可能希望在后台线程上调度。

关于ios - 我如何暂停10秒以发送输入而不会丢失数据iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191834/

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