运行时错误:前提条件失败:属性无法设置初始值

时间:2019-10-26 18:39:37

标签: swiftui navigationlink

我有一个视图input clk, run; input [7:0]data_in; output reg [7:0]avg=0; output reg valid; reg [10:0]data_out; integer count=0,i; always @* begin data_out=data_out+data_in; valid=1'b0; count=count+1; if(count==8) begin valid=1'b1; avg=data_out<<3; count=0; data_out=0; end end endmodule //TestBench `timescale 1ns/10ps module average8bytes_tb; reg clk, run; reg [7:0]data_in; wire [7:0]avg; wire valid; reg [7:0]mem[0:79]; reg [7:0]res[0:9]; integer foutput,soutput,address,i,j,k; initial begin foutput=$fopen("/home/krishna/p2_tb.txt","r"); i=0; j=0; k=0; while(!$feof(foutput)) begin if(i==8||i==17||i==26||i==35||i==44||i==53||i==62||i==71||i==80||i==89) begin soutput=$fscanf(foutput,"%d",res[j]); j=j+1; end else begin soutput=$fscanf(foutput,"%d",mem[k]); k=k+1; end i=i+1; end $fclose(foutput); end average8bytes test(run, clk, data_in, avg, valid); initial begin $monitor("%d %d %d %d ",clk,run,data_in,avg,valid); $dumpfile("average8bytes_test.vcd"); $dumpvars(0, test); clk=0; run=0; data_in=mem[0]; for(address=1;address<80;address=address+1) begin #1 data_in=mem[address]; end $finish; end always @* #1 clk <= ~clk; endmodule When I calculate the average the valid bit should be 1 else 0 and the module should pause when run=0. ,该视图可以单独运行但会导致

  

前提条件失败:属性无法设置初始值

在预览或模拟器中导航到

时出错。

该视图的上部(颜色)和下部(颜色)由水平按钮栏隔开,并使用GeometeryReader和BugSplitView状态进行布局。当它是NavigationButton的目标时,它不会在Preview中正确显示,并且在模拟器中运行时会报告上述断言。删除split即可。让我难过!帮助。

BugButtonBar

8 个答案:

答案 0 :(得分:3)

对我来说,它是导航栏标题中的 displayMode 内联。删除它可以解决此问题。

崩溃

.navigationBarTitle("Title", displayMode: .inline)

没有崩溃

.navigationBarTitle("Title")

答案 1 :(得分:2)

由于这个错误-无法直接调试-可能是由许多不同的问题引起的,所以我想我也将案件丢在这里。

就我而言,我得到的错误是:

前提条件失败:属性无法设置初始值-128

问题是我试图在VStack上展示一个包含NavigationView的工作表,如下所示:

var body: some View {
    VStack(alignment: .center) {
        if /* some condition */ {
            /* some other content */
        } else {
            NavigationView {
                /* view content */
            }
        }
    }.sheet(isPresented: /* Binding value */) { 
        /* sheet content */
    }
}

解决方法是确保将工作表显示在NavigationView上

var body: some View {
    NavigationView {
        VStack(alignment: .center) {
            if /* some condition */ {
                /* some other content */
            } else {
                /* view content */
            }
        }
    }.sheet(isPresented: /* Binding value */) { 
        /* sheet content */
    }
}

事后看来,这很明显,但是当崩溃最初发生时,能获得更多的信息是很高兴的。

答案 2 :(得分:2)

我遇到了这个错误。就我而言,这是由于if-else语句的两个块中都有一个NavigationView造成的。

// bad
if someBool {
  NavigationView {
    Text("some content")
  }
} else {
  NavigationView {
    Text("different content")
  }
}
// good
NavigationView {
  if someBool {
    Text("some content")
  } else {
    Text("different content")
  }
}

答案 3 :(得分:0)

问题是您的按钮被声明为计算属性。要解决崩溃,请这样声明它们:

var buttons = [BugButtonBar.Info(title: "title", imageName: "text.insert"){}]

答案 4 :(得分:0)

原来是结构信息的id属性是问题所在。如下将其更改为计算属性:

var id : String {
   title + imageName
}

为什么我爱/恨SwiftUI的好例子。

答案 5 :(得分:0)

在我的情况下,它是在视图消失时为绑定属性设置一个值,该属性会像这样更改视图:

  .onDisappear(perform: {
    withAnimation(.easeInOut) {
        self.action.collageWidthSize = 2.0 /* modifies next view border */
      }
   })

在下一个视图的onAppear中进行设置可以解决此问题:

   .onAppear {
        withAnimation(.easeInOut) {
            self.action.collageWidthSize = 2.0
        }
    }

答案 6 :(得分:0)

好吧,我对此有点感冒。 Xcode 11.6。

我的视图可能有点混乱,但是我正在做的是,如果用户将视图置于“编辑”模式,则所有单元格都会更改其表示。我切换回去时似乎随机出现此错误。我通过删除不必要的绑定来固定它(手指仍在交叉)。我正在将布尔绑定传递到某些子视图中,以便它们知道事物处于什么状态以及如何呈现。事实是,他们不需要响应布尔值更改,因为无论如何重绘了父级,它可以重新创建子级。无需通知他们应该更改状态,只需将它们销毁并重新创建即可。

答案 7 :(得分:0)

我使用 NavigationView 作为 TabView 的根:

NavigationView {
   TabView {
   }
}

然后在 TabView 中我也使用了 NavigationView,所以由于这个错误。解决方案是只使用一个 NavigationView