问题描述
似乎NSManagedobject
的子类中需要重写Core Data生命周期方法。我在应用程序的各个部分,主视图控制器,详细信息视图控制器等中都有删除功能,其中一些功能需要条件语句,具体取决于视图控制器内属性的状态。如何在视图控制器中使用它或将参数传递给prepareForDeletion
方法?
当我通过“创建NSManagedobject子类”功能生成NSMangedobject的子类时,将创建子类文件,以使它们与视图控制器分开存在。
override func prepareForDeletion() {
super.prepareForDeletion()
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
}
解决方法
func prepareForDeletion()
用于在删除对象时在数据库中传播自定义更改。
请勿在数据层中放置UI级别决策逻辑。
filePath
可能是用户界面的一部分,如果删除操作具有足够的通用性,则可以在每个位置重复逻辑,也可以在某个位置压缩为逻辑对象。
class DatabaseDecisions {
@discardableResult func delete(_ thing: Thing,filePath: String?) -> Bool {
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
return didIReallyDeleteIt
}
}
然后在用户界面级别(例如在您的视图控制器中)
func deleteAction(_ sender: Any) {
let thing = selectedThing()
DatabaseDecisions().delete(thing,filePath: filePath)
}
编辑
要对某个属性集产生副作用,您可以像使用其他任何属性一样使用didSet
。
extension Thing {
public override var filePath: String? {
didSet {
//logic to cleanup files
}
}
}
但是同样有可能这种逻辑最好放在数据层之外,而将清理操作委托给外部逻辑。