如何将参数传递给 Core Data 生命周期方法?
How to pass an argument to a Core Data life cycle method?
似乎需要在 NSManagedObject
的子类中覆盖 Core Data 生命周期方法。我的应用程序的各个部分都有删除功能,在主视图控制器、详细视图控制器等中,其中一些需要条件语句,具体取决于视图控制器中 属性 的状态。我如何在视图控制器中使用它或将参数传递给 prepareForDeletion
方法?
当我通过“创建 NSManagedObject 子类”功能生成 NSMangedObject 的子类时,创建子类文件以便它们与视图控制器分开存在。
override func prepareForDeletion() {
super.prepareForDeletion()
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
}
func prepareForDeletion()
用于在删除对象时在数据库中传播自定义更改。
不要将 UI 级决策逻辑放在数据层中。
由于 filePath
可能是 UI 的一部分,您可以在每个地方重复逻辑,或者如果删除操作中有足够的通用性,则可以在某处浓缩为逻辑对象。
class DatabaseDecisions {
@discardableResult func delete(_ thing: Thing, filePath: String?) -> Bool {
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
return didIReallyDeleteIt
}
}
然后在 UI 级别,例如在您的视图控制器中
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
}
}
}
但同样可能这种逻辑最好留在数据层之外,并将清理操作委托给外部逻辑。
似乎需要在 NSManagedObject
的子类中覆盖 Core Data 生命周期方法。我的应用程序的各个部分都有删除功能,在主视图控制器、详细视图控制器等中,其中一些需要条件语句,具体取决于视图控制器中 属性 的状态。我如何在视图控制器中使用它或将参数传递给 prepareForDeletion
方法?
当我通过“创建 NSManagedObject 子类”功能生成 NSMangedObject 的子类时,创建子类文件以便它们与视图控制器分开存在。
override func prepareForDeletion() {
super.prepareForDeletion()
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
}
func prepareForDeletion()
用于在删除对象时在数据库中传播自定义更改。
不要将 UI 级决策逻辑放在数据层中。
由于 filePath
可能是 UI 的一部分,您可以在每个地方重复逻辑,或者如果删除操作中有足够的通用性,则可以在某处浓缩为逻辑对象。
class DatabaseDecisions {
@discardableResult func delete(_ thing: Thing, filePath: String?) -> Bool {
if filePath != nil {
// logic
} else {
print("filepath is empty")
}
return didIReallyDeleteIt
}
}
然后在 UI 级别,例如在您的视图控制器中
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
}
}
}
但同样可能这种逻辑最好留在数据层之外,并将清理操作委托给外部逻辑。