gpt4 book ai didi

ios - 在执行dispatch_semaphore_wait(sem,DISPATCH_TIME_FOREVER)之后,再也不会收到回调

转载 作者:行者123 更新时间:2023-12-01 19:59:47 25 4
gpt4 key购买 nike

我正试图等到我的休息服务回电收到,但是之后

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

行,一切都停止了,我再也没有收到回电。我的代码如下。
__block NSString *strTaggedText=@"";

dispatch_semaphore_t sem;

sem = dispatch_semaphore_create(0);

[[manager2 dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {

if (!error) {
NSLog(@"Reply JSON: %@", responseObject);
dictionary=[responseObject objectForKey:@"****"];
strTaggedText=[dictionary objectForKey:@"Text"];
NSLog(@"strText = %@",strTaggedText);


} else
{
NSLog(@"Error: %@, %@, %@", error, response, responseObject);


}
dispatch_semaphore_signal(sem);

}] resume];

dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);


return strTaggedText;

最佳答案

您已经停止了主运行循环,这意味着将不处理任何事件,并且该应用将停止响应。

您正在调用异步方法,并且在显示了繁忙指示符之后,主线程应立即返回。

处理应从该块内继续进行,该块将在后台线程中调用。然后,您可以将数据推送到预期的任何位置并取消忙碌指示器。然后可以在主线程上触发下一个事件,但这取决于您;当然,任何UI交互都必须仅在主线程上完成。

我认为这是asynchronous programming,但是完整的讨论超出了stackoverflow答案的范围。

关于ios - 在执行dispatch_semaphore_wait(sem,DISPATCH_TIME_FOREVER)之后,再也不会收到回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40378807/

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