自从我使用首选项 ( PreferenceKey,..)以来,我在控制台中收到此消息:
Bound preference _ tried to update multiple times per frame.
经过无数次的研究,我还没有找到任何方法可以让它静音。所以...既然还没有特别针对此警告的问题,您认为可能的原因是什么?
如果没有,可以忽略此警告还是我必须修复它?
非常感谢!
(我试图找到一个例子,但不知何故我没有得到任何简单的警告......)
kul*_*ich 19
我认为苹果工程师的这个回答描述了一般性问题:
\n\n\n\n听起来你的更新有一个周期。例如,写入首选项的 GeometryReader 会导致包含视图调整大小,从而导致 GeometryReader 再次写入首选项。避免创建此类循环非常重要。通常,这可以通过将 GeometryReader 在视图层次结构中移动到更高的位置来完成,这样它的大小就不会改变,并且可以将大小传达给其子视图,而不是使用首选项。我\xe2\x80\x99恐怕我无法\xe2\x80\x99在没有看到你的代码的情况下提供\n更具体的指导,但是\n希望这可以帮助你找到问题!
\n
至少它激励我解决了我的案例中的相关错误并使警告消失(几乎:))。
\nSwiftUI 更改处理程序,例如onPreferenceChange在任意线程上调用。因此,如果这些更改影响您的视图,您应该重新调度以确保在主线程上进行这些更新:
.onPreferenceChange(MyPreferenceKey.self) { newValue in
DispatchQueue.main.async {
widget.value = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2075 次 |
| 最近记录: |