首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DispatchQueue.main.asyncAfter反复调用iOS 14.0Beta

DispatchQueue.main.asyncAfter反复调用iOS 14.0Beta
EN

Stack Overflow用户
提问于 2020-07-05 05:41:12
回答 1查看 1.2K关注 0票数 1

该延迟代码下面的代码在iOS 14.0以下运行良好,但在iOS 14.0模拟器中,它每2秒重复调用一次。有什么我错过的吗?

代码语言:javascript
复制
  DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Change `2.0` to the desired number of seconds.
      // Code you want to be delayed
   }

这里我添加了完整的代码:

代码语言:javascript
复制
    struct ContentView: View {
    
    @State var show = false
    
    var body: some View {
        NavigationView{
            
            VStack{
                NavigationLink(destination: Text("New View"), isActive: $show, label: {
                    Image("main_logo").renderingMode(.original).frame(width: 100, height: 100)
                })
                    .onAppear {
                        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                        self.show.toggle()
                        }
                }
            }  .navigationBarHidden(true)
                .navigationBarTitle(Text("Home"))
                .edgesIgnoringSafeArea([.top, .bottom])
            
            
            
        }.preferredColorScheme(.dark) // white tint on status bar
        
    }
}

我从这里调用New在2秒后,新视图在2秒后被取消,然后返回到上面的视图,它重复。

这就是我在控制台输出中得到的

代码语言:javascript
复制
[UIContextMenuInteraction] Attempting -[UIContextMenuInteraction dismissMenu], when not in an active state. This is a client error most often caused by calling dismiss more than once during a given lifecycle. (<_UIVariableGestureContextMenuInteraction: 0x60000121a920>)

我正在使用 Mac Big Sur Beta和Xcode 12 Beta

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 06:36:37

在……里面

代码语言:javascript
复制
.onAppear {
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
    self.show.toggle()    // << this !!
    }
}

。。self.show.toggle()使body重建和NavigationLink重新创建(因为它依赖于show,因此.onAppear再次调用(因为它是新链接),您可以看到-逐个循环。

所以DispatchQueue.main.asyncAfter没有什么问题。

可能您打算将该.onAppear修饰符附加到根视图,即。可能是NavigationView

更新:下面测试的是在Xcode 12 / iOS 14上运行的

代码语言:javascript
复制
struct ContentView: View {
    
    @State var show = false
    
    var body: some View {
        NavigationView{
            
            VStack{
                NavigationLink(destination: Text("New View"), isActive: $show, label: {
                    Image("main_logo").renderingMode(.original).frame(width: 100, height: 100)
                })
            }  .navigationBarHidden(true)
                .navigationBarTitle(Text("Home"))
                .edgesIgnoringSafeArea([.top, .bottom])
        }.preferredColorScheme(.dark) // white tint on status bar
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                self.show.toggle()
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62737252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档