如何将参数传递给Core Data生命周期方法?

似乎NSManagedObject的子类中需要重写Core Data生命周期方法。我在应用程序的各个部分,主视图控制器,详细信息视图控制器等中都有删除功能,其中一些功能需要条件语句,具体取决于视图控制器内属性的状态。如何在视图控制器中使用它或将参数传递给prepareForDeletion方法?

当我通过“创建NSManagedObject子类”功能生成NSMangedObject的子类时,将创建子类文件,以使它们与视图控制器分开存在。

override func prepareForDeletion() {
    super.prepareForDeletion()
    
    if filePath != nil {
        // logic
    } else {
        print("filepath is empty")
    }
}
iCMS 回答:如何将参数传递给Core Data生命周期方法?

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
        }
    }
}

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

本文链接:https://www.f2er.com/1635130.html

大家都在问