gpt4 book ai didi

swift - 如何初始化一个新的 NSManagedObject 并在单个托管对象上下文中设置与另一个 NSManagedObject 的关系?

转载 作者:行者123 更新时间:2023-11-30 12:41:45 29 4
gpt4 key购买 nike

我正在创建一个新的 NSManagedObject 并尝试与另一个 NSManagedObject 建立关系,但收到此错误:

Illegal attempt to establish a relationship 'lift' between objects in different contexts

我知道为什么会发生这种情况 - 我只是不知道如何解决它。

我调用此函数来创建新对象:

func createNewLiftEvent() -> LiftEvent {
let entity = NSEntityDescription.entityForName("LiftEvent", inManagedObjectContext: moc!)
let newLiftEvent = LiftEvent(entity: entity!, insertIntoManagedObjectContext: moc)

return newLiftEvent
}

我的 LiftEvent 实例在初始化时设置自己的值。在 awakeFromInsert 中,调用了三个辅助方法,它们使用一个名为 LiftEventDataManager (dataManager) 的类,这当然是创建我不想要的第二个 ManagedObjectContext 的原因:

override func awakeFromInsert() {
super.awakeFromInsert()

let defaultUnit = getDefaultWeightUnit() // returns an NSManagedObject
self.weightUnit = defaultUnit

let defaultLift = getDefaultLift() // returns an NSManagedObject
self.lift = defaultLift

let defaultFormula = getDefaultFormula() // returns an NSManagedObject
self.formula = defaultFormula

self.maxAmount = 0.0
}

这是这些辅助方法之一的示例:

func getDefaultFormula() -> Formula {
let formulasArray = dataManager.fetchSelectableFormulas() // this is what creates a new managedObjectContext
let defaultFormula = NSUserDefaults.formula().rawValue
formula = formulasArray[defaultFormula]
return formula
}

createNewLiftEvent() 函数位于 LiftEventDataManager 类中,以及上面的辅助函数中调用的 .fetchSelectableFormulas() 方法等方法。

Apple 的核心数据编程指南没有提及任何有关此特定问题的内容,而且我还没有在 SO 上找到任何线程来解决初始化时的多个上下文问题。

如何在“上下文 A”中创建新的 LiftEventObject 并获取其他托管对象并将它们放入“上下文 A”中,以便设置关系?

最佳答案

一个选择可能是传递您的原始 LiftEvent 对象,并让您的帮助器方法使用该 LifeEvent 的 ManagedObjectContext 执行其操作(所有托管对象都有对其上下文的引用,因此您可以利用这一事实)。

(可能不适用,但仅供引用,如果线程发挥作用,请小心。您可能还需要使用performBlockAndWait)

关于swift - 如何初始化一个新的 NSManagedObject 并在单个托管对象上下文中设置与另一个 NSManagedObject 的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163395/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com