gpt4 book ai didi

ios - CoreStore 在上下文中创建对象而不保存到数据库

转载 作者:行者123 更新时间:2023-11-28 13:41:34 31 4
gpt4 key购买 nike

我要解决下一个问题:

我想在上下文中使用一些 NSManagedObject 并在运行时更改一些属性,但不告诉 SQLite 其中的任何更改。

我只想在点击保存按钮或类似按钮时将 NSManagedObject 保存到数据库。

正如我从源代码演示中发现的那样,我们需要为此目的使用 beginUnsafe(也许我错了)

func unstoredWorkout() -> WorkoutEntity {

let transaction = CoreStore.beginUnsafe()
let workout = transaction.create(Into<WorkoutEntity>())

return workout
}

let workout = unstoredWorkout()
workout.muscles = []

现在,当我尝试更新 workout.muscles = [] 时,应用程序因错误而崩溃:

error: Mutating a managed object 0x600003f68b60 <x-coredata://C00A3E74-AC3F-47FD-B656-CA0ECA02832F/WorkoutEntity/tC3921DAE-BA43-45CB-8271-079CC0E4821D82> (0x600001c2da90) after it has been removed from its context.

我的问题是我们如何在不保存对象的情况下创建对象,以及如何在我们修改某些属性时保存它并避免这种崩溃。

最佳答案

崩溃的原因是您的事务只存在于您的 unstoredWorkout() 方法中,因此它调用 deinit,它会重置上下文(并删除所有未保存的对象)。您必须在某处保留该不安全事务以保持您的对象处于事件状态 - 例如在最终将保存更改的 View Controller 中。

但如果您真的想这样做,我宁愿鼓励您考虑一下。您可能会遇到各种上下文或其他异步事务事件的其他同步问题,例如涉及 API 调用时。

关于ios - CoreStore 在上下文中创建对象而不保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55951308/

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