此函数的作用与预期不符。我正在尝试将一组字段设置为空。前面的部分获得了正确的字段名,并在其他函数中使用。我有大约十张table,它们都有相同的背景,如果有关系的话。
第一件意想不到的事情是,“是,更改”永远不会运行,因此我假定settings
对象与其上下文分离。或者可能CoreData将nil视为触发.hasChanges
标志的某种例外?
当它运行时,保存不会抛出任何错误,并且对象会按预期显示,并且显示的值设置为nil。但数据库没有任何变化。
我可以毫无问题地将数据保存到这些字段中,并在数据库中确认;只有在将值设置为nil时才会出现此问题。
static func clearSettings(_ s : Set<PaletteElementType>? = nil) {
guard var setting = activeSetting() else {return}
print(setting.id)
let cats = s ?? PaletteView.compCatButtons
let tgts = setting.getAssociatedFieldNames(tgts: cats, clearing : true, values: false)
for (key, val) in tgts {
var src = Set((val as? Dictionary<FieldNameSuffixes, String>)!.values)
if key == .catBgndButton {
src = src.union(["opacity", "opacityStart", "opacityStartDelta","opacityEnd", "opacityEndDelta", "opacityTimer"])
}
for s in src {
print(s)
setting.setNilValueForKey(s)
if Blocks.context!.hasChanges {
print("yes, changes")
}
do {
try Blocks.context!.save()
print("deleted (setting.value(forKey: s))")
} catch { print("deadly dogs")}
}
print("val is (setting)")
}
}
1条答案
按热度按时间yptwkmov1#
好的,当我这样做的时候,工作:
很高兴它起作用了,但我真的不明白这里的区别。处理这件事的更好方法是什么?我不是在追求一些超级性能的代码,所以我不介意额外的几次循环……但这是怎么回事呢?