更改文本字段的禁用状态时获取`AttributeGraph:循环检测`错误
Posted
技术标签:
【中文标题】更改文本字段的禁用状态时获取`AttributeGraph:循环检测`错误【英文标题】:Get `AttributeGraph: cycle detected` error when changing disabled state of text field 【发布时间】:2021-12-07 17:18:53 【问题描述】:当我在我的视图中更新 isDisabled
状态变量时,它会按预期更新我的文本字段的 .disabled
修饰符,但随后会导致控制台中出现大约 40 个以下错误实例(具有不同的属性最后的数字):
=== AttributeGraph: cycle detected through attribute 200472 ===
然后它说:AttributeGraphError[59460:4808136] [SwiftUI] Modifying state during view update, this will cause undefined behavior.
这是产生错误的代码的最小版本:
struct ContentView: View
@State var isDisabled = false
@State var text = ""
var body: some View
VStack
TextField("", text: $text)
.textFieldStyle(.roundedBorder)
.disabled(isDisabled)
Button("Disable text field") isDisabled = true
如何解决这个错误?
【问题讨论】:
【参考方案1】:经过几个小时的痛苦调试,我找到了解决方案!
事实证明,问题在于您无法在用户仍在编辑该字段时禁用该文本字段。相反,您必须先退出文本字段(即关闭键盘),然后然后禁用文本字段。
这是我更新的代码:
struct ContentView: View
@State var isDisabled = false
@State var text = ""
var body: some View
VStack
TextField("", text: $text)
.textFieldStyle(.roundedBorder)
.disabled(isDisabled)
Button("Disable text field")
closeKeyboard()
isDisabled = true
func closeKeyboard()
UIApplication.shared.sendAction(
#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil
)
【讨论】:
以上是关于更改文本字段的禁用状态时获取`AttributeGraph:循环检测`错误的主要内容,如果未能解决你的问题,请参考以下文章