gpt4 book ai didi

ios - 延迟类选择器调用

转载 作者:行者123 更新时间:2023-11-28 19:56:18 25 4
gpt4 key购买 nike

我正在尝试使用 args 延迟异步调用类方法,以隐藏 UILabel。本质上,标签应该出现,然后在三秒钟内消失。我正在使用以下内容来完成此操作。

设置显示 View 的主要方法

 +(void)queueError:(UILabel*)messageView errorText:(NSString*)errorText{
[messageView setText:errorText];
messageView.hidden = NO;
messageView.tag = arc4random_uniform(UINT32_MAX);
[UIView animateWithDuration:0.3 delay:0.0 options:0 animations:^(){
messageView.alpha = 1.0;
}completion:^(BOOL finished){
NSArray* args = [NSArray arrayWithObjects:messageView, [NSNumber numberWithInt:messageView.tag ], nil];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[UBSNavigationUtils class] performSelector:@selector(dequeueErrorTime:) withObject:args afterDelay:3];
});
}];
}

延迟三秒后调用的方法

+(void)dequeueErrorTime:(NSArray*)args{
UILabel* messageView = args[0];
NSInteger tag = [((NSNumber*)args[1]) integerValue];
if(messageView.tag == tag){
[[UBSNavigationUtils class] fadeOutError:messageView];
}
}

但是,我的方法从未被调用。

最佳答案

您将选择器放入未运行的 dispatch_queue runloop(技术上作为计时器)。因此,您的方法从未调用过。我认为,如果您尝试调用 [[NSRunLoop currentRunLoop]run]; ,方法将被调用。

来自苹果关于 performSelector:afterDelay: 的讨论当计时器触发时,线程尝试从运行循环中取出消息并执行选择器。如果运行循环正在运行并且处于默认模式,则它会成功;否则,计时器会一直等待,直到运行循环处于默认模式。

关于ios - 延迟类选择器调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223535/

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