假设我的 FetchedResultsController 中有对象。对象与另一个名为 Category 的实体有关系。如果用户未设置类别或所选类别,则此值可以为零。用户可以随时删除和创建类别。
但是,当一个类别被删除时,具有特定类别的对象,而不是nil
作为类别属性,它具有特定的类别,它不再存在,给我一个错误。< / p>
如何更新我的frc对象,以便在删除类别时,将category属性设置为已删除类别的每个其他对象将当前类别设置为nil
。
这是我在frc中保存数据的方式:
func save(sumText: String, dataDescription: String, dataColor: UIColor, category: Categories?, type: String, completion: (_ finished: Bool) -> ()) {
let budget = NSEntityDescription.insertNewObject(forEntityName: "Budget", into: managedObjectContext!) as! Budget
budget.dataSum = sumText
budget.dataDescription = dataDescription
budget.dataColor = dataColor
budget.dateSubmitted = Date()
budget.dateSection = formatDate(date: Date())
budget.type = type
if let cat = category {
budget.category = cat
}
do{
try managedObjectContext?.save()
print("Succesfully saved data")
completion(true)
} catch {
debugPrint("Could not save \(error.localizedDescription)")
completion(false)
}
}
这是我删除类别的方法:
let deleteAction = SwipeAction(style: .destructive, title: "Sterge") { (action, indexPath) in
guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
managedContext.delete(userCategories[indexPath.row])
do {
try managedContext.save()
} catch {}
self.fetchCoreDataObject()
tableView.reloadData()
}
因此,当我删除类别时,我必须将所有具有该类别的对象更新为nil,但我不知道如何。
答案 0 :(得分:0)
您需要做的就是将删除规则指定为Nullify
。
当您使用Nullify
删除规则时,在删除对象时,其引用作为其关系一部分的所有其他对象将按预期初始化为nil。您不需要为此编写代码。
现在代码中出现问题:
查看您发布的模型,我可以看到Budget
实体与名称Categories
的{{1}}实体存在关系(一对一)。现在,如果您只是选择category
关系并将删除规则设置为category
,则删除Nullify
Budget
会将其引用设为nil但这不是您想要的。
首先,当您命名实体拇指规则之间的关系时 实体名称1 - &gt;关系名称 - &gt;实体Name2应该发表声明并明确解释这种关系。
示例:预算isOfType类别
反转可以是:类别用于预算。
但是如你所示,使用不可能是一对一的关系。类别可以在多个预算中使用。你不想为每个预算实体创建一个单独的类别吗?
让我们最后指定删除规则。删除Category
时,预算中的所有Category
引用都应设置为无正确。因此,选择类别实体,突出显示usedBy关系并将删除规则设置为Nullify
最后,如果用户删除预算,则类别应保持不变,因此选择预算,突出显示isOfType并将删除规则设置为
希望这会有所帮助:)