ios - CoreStore 在上下文中创建对象而不保存到数据库
问题描述
我想解决下一个问题:
我想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,它重置上下文(并删除所有未保存的对象)。您必须在某处保留该不安全事务以使您的对象保持活动状态 - 例如在最终将保存更改的视图控制器中。
但是,如果您真的想这样做,我宁愿鼓励您考虑一下。您可能会遇到各种上下文或其他异步事务处于活动状态的其他同步问题,例如涉及 API 调用时。
推荐阅读
- reactjs - 为什么Pressable,onPressOut道具正在滚动但不适用于android的react-native中的屏幕触摸
- amazon-ec2 - EC2 GRPC 安装在 12 小时后挂起仍然没有安装
- html - 如何格式化 Django URL,以便 AJAX 调用将获取不依赖于当前页面但来自表单值的数据库数据?
- spring - 如何使用 Spring Boot application.yml 连接到数据库
- python - 美丽的数字
- python - 如何将文件夹中的所有文件作为输入(一次一个)并在处理后将它们保存到另一个文件夹中?(使用powershell)
- xml - XSD 中的循环依赖是否有效?
- python - 正则表达式匹配多个字符串之一
- python - Raspberry PI 上的 Python 脚本(不工作)
- bash - 使用在其他文件中找到的不同变量运行作业脚本