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

Ios CoreStore在上下文中创建对象而不保存到数据库,ios,swift,core-data,corestore,Ios,Swift,Core Data,Corestore,我想解决下一个问题: 我想在上下文中使用一些NSManagedObject,并在运行时更改一些属性,但不告诉SQLite其中的任何更改 当我点击保存按钮或类似按钮时,我只想将NSManagedObject保存到数据库中 正如我从源代码演示中发现的那样,我们需要为此使用beginUnsafe(也许我错了) 我的问题是,如何在不保存对象的情况下创建对象,以及如何在修改某些属性时保存对象并避免此崩溃。崩溃的原因是您的事务只存在于unstoredWorkout()方法中,因此它调用deinit,这将重置

我想解决下一个问题:

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

当我点击保存按钮或类似按钮时,我只想将
NSManagedObject
保存到数据库中

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


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

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


但如果你真的想这么做的话,我宁愿鼓励你考虑一下。在各种上下文或其他异步事务处于活动状态时,您可能会遇到其他同步问题,例如当涉及API调用时。

ok明白了,我想最好的解决方案是,在编辑表单期间使用Struct或NSObject存储临时值,然后通过上下文创建或更新NSManagedObject。CoreStore.perform(异步或同步)将上下文中的所有对象保存到数据库文件,对吗?是的,CoreStore.perform()始终将更改提交到主上下文。
func unstoredWorkout() -> WorkoutEntity {

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

    return workout
}

let workout = unstoredWorkout()
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.