如何将参数传递给 Core Data 生命周期方法?
Posted
技术标签:
【中文标题】如何将参数传递给 Core Data 生命周期方法?【英文标题】:How to pass an argument to a Core Data life cycle method? 【发布时间】:2020-09-02 17:03:33 【问题描述】:似乎需要在 NSManagedObject
的子类中重写 Core Data 生命周期方法。我的应用程序的各个部分都有删除功能,在主视图控制器、详细视图控制器等中,其中一些需要条件语句,具体取决于视图控制器中属性的状态。如何在视图控制器中使用它或将参数传递给 prepareForDeletion
方法?
当我通过“创建 NSManagedObject 子类”功能生成 NSManagedObject 的子类时,会创建子类文件,以便它们与视图控制器分开存在。
override func prepareForDeletion()
super.prepareForDeletion()
if filePath != nil
// logic
else
print("filepath is empty")
【问题讨论】:
文件路径是您要传递的东西还是您的实体的属性? 我想通过。 【参考方案1】: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
但同样,这个逻辑最好留在数据层之外,并将清理操作委托给外部逻辑。
【讨论】:
感谢您的回答。假设filePath
是一个实体的属性,它被获取和修改,是否有一个生命周期方法被触发以删除以前的文件?例如filePath = "A"
被获取并更新为filePath = "B"
,我想删除位于“A”的文件。以上是关于如何将参数传递给 Core Data 生命周期方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何将多个参数传递给 ASP.NET CORE MVC 中的 HttpGet 方法?
SwiftUI Core Data 在 DetailView 中绑定 TextFields