Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI-环境对象未更新UI_Ios_Swift_User Interface_State_Swiftui - Fatal编程技术网

Ios SwiftUI-环境对象未更新UI

Ios SwiftUI-环境对象未更新UI,ios,swift,user-interface,state,swiftui,Ios,Swift,User Interface,State,Swiftui,我的应用程序有一个按钮,可以生成绿色或红色背景。用户反复按下按钮,每次生成绿色或红色,结果记录到一个称为“当前会话”的可观察对象中。当前总计显示在由胶囊组成的自定义视图中。由于某些原因,该视图将不会更新总计并保持显示0 我尝试在ResultsBar中为numberOfGreens添加一个状态绑定,但这也不起作用。它仍然只是每次显示0。环境已添加到我的所有视图中。我已尝试打印结果,结果编号在控制台中显示正确,但UI不会更新。有趣的是,trialsRemaining变量在我的应用程序的其他屏幕上工作

我的应用程序有一个按钮,可以生成绿色或红色背景。用户反复按下按钮,每次生成绿色或红色,结果记录到一个称为“当前会话”的可观察对象中。当前总计显示在由胶囊组成的自定义视图中。由于某些原因,该视图将不会更新总计并保持显示0

我尝试在ResultsBar中为numberOfGreens添加一个状态绑定,但这也不起作用。它仍然只是每次显示0。环境已添加到我的所有视图中。我已尝试打印结果,结果编号在控制台中显示正确,但UI不会更新。有趣的是,trialsRemaining变量在我的应用程序的其他屏幕上工作得很好,在必要时更新它没有问题。此外,ResultsBar在预览中工作得非常好

class CurrentSession:可观察对象{
@已发布变量TrialsLeving:Int=100
@已发布变量numberofgreen:Int=0
@已发布变量numberOfReds:Int=0
func生成函数(){
...
如果resultIsGreen{numberofgreen+=1}
如果结果为{numberOfReds+=1}
三元剩余-=1
}
}
struct ResultsBar:视图{
让totalBarWidth:CGFloat=UIScreen.main.bounds.width-48
var onePercentOfTotalWidth:CGFloat{return totalBarWidth/100}
变量numberOfGreens:Int
var body:一些观点{
ZStack(对齐:。前导){
胶囊()
.框架(宽度:totalBarWidth,高度:36)
.foregroundColor(.red)
.阴影(半径:4)
胶囊()
.框架(宽度:(总宽度的百分之一*CGFloat(绿色数)),高度:36)
.foregroundColor(.绿色)
.阴影(半径:4)
}
}
}
struct ResultsView:View{
@环境对象变量会话:CurrentSession
var body:一些观点{
VStack{
HStack{
文本(“\(session.numberofgreen)”)
垫片()
文本(“\(session.numberOfReds)”)
}
结果栏(numberOfGreens:session.numberOfGreens)
}
}
}

我正在macOS Catalina 10.15.2 beta(19C32e)上运行Xcode 11.2 beta 2(11B44)。

您是否将对
当前会话
实例的引用传递到
结果视图
?如果我复制了您的代码,当我单击它时,以下内容会更新
ResultsBar

struct ContentView: View {
    @ObservedObject var session = CurrentSession()

    var body: some View {
        ResultsView()
            .environmentObject(session)
            .onTapGesture {
                self.session.generateGreenOrRed()
            }
    }
}

你能显示按钮的代码吗?@Chris除了一个按钮按下函数调用该函数生成绿色或红色,并启动计时器禁用按钮5秒钟(所有这些都可以正常工作)之外,没有其他东西。这让我解决了这个问题!这不是你说的,实际上是关于使用EnvironmentObject包装器。我将其更改为ObservedObject everywhere,并将环境对象添加到视图主体的末尾,现在它可以工作了。谢谢你把我推向正确的方向。在iOS 14中,这个解决方案破坏了应用程序,不要这样做!!!