SwiftUI hasChanges 总是返回 true
Posted
技术标签:
【中文标题】SwiftUI hasChanges 总是返回 true【英文标题】:SwiftUI hasChanges always return true 【发布时间】:2020-05-17 15:18:54 【问题描述】:我的代码如下。数据中的name没有变化,但是hasChanges总是返回true,是不是我做错了什么?非常感谢您的帮助!
struct SwiftUI: View
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var pre: Binding<PresentationMode>
var data: CoreData
@State private var name = ""
var body: some View
NavigationView
HStack
TextField("name", text: self.$name)
.onAppear
self.name = self.data.name ?? ""
Button(action: dataSave)
HStack
Text("Done")
func dataSave()
self.data.name = self.name
if moc.hasChanges
do
try moc.save()
self.pre.wrappedValue.dismiss()
catch print(error.localizedDescription)
else
self.pre.wrappedValue.dismiss()
为什么这里总是返回true?
moc.hasChanges
【问题讨论】:
【参考方案1】:NSManagedObjectContext.hasChanges
在您分配给该上下文中对象的任何属性时设置为 true,即使该属性的值与以前相同。
你可以改变你的代码来做:
if self.name != self.data.name
self.data.name = self.name
if moc.hasChanges /* ... */
或者,在对象本身(不是上下文)上检查hasPersistentChangedValues
:
self.data.name = self.name
if self.data.hasPersistentChangedValues
do
try moc.save()
self.pre.wrappedValue.dismiss()
catch print(error.localizedDescription)
else
self.pre.wrappedValue.dismiss()
很遗憾,NSManagedObjectContext
没有等效的 hasPersistentChangedValues
属性。第二种方法仅在您的示例中是合理的,而不是一般情况下,上下文中可能有许多对象可能已经更改。
有关hasChanges
和hasPersistentChangedValues
行为的更多信息,请参阅此答案:NSManagedObject's hasChanges is true while changedValues is empty
【讨论】:
我明白了。解决了。非常感谢以上是关于SwiftUI hasChanges 总是返回 true的主要内容,如果未能解决你的问题,请参考以下文章
Kendo Grid hasChanges,如何处理只读网格?