如何将参数传递给 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
        }
    }
}

但同样可能这种逻辑最好留在数据层之外,并将清理操作委托给外部逻辑。