核心数据阻止保存
Core Data prevent saving
有没有办法防止根据特定条件保存特定 NSManagedObjectModel
?
我知道我们可以在保存前使用willSave
修改对象,但是有没有办法阻止对象被保存?
override public func willSave() {
if self.name != nil {
// Save the object into context
}
else {
// Don't save the object into context
}
}
这个请求的原因是用户应该能够启动一个表单并插入一些值,然后他还可以转到其他屏幕并执行其他可以触发 context.save()
的操作,而我不希望在未完成的情况下保存表格。
我需要在上下文中创建此对象,因为该对象与上下文中的另一个对象有关系,如果我在上下文之外创建对象,我将需要更改所有关系的上下文。
提前致谢。
我知道你提到你不想使用不同的上下文,但使用不同的上下文确实是最好的方法。
如果您在主上下文中创建,即使不保存,数据仍然是 'in context'。分开是最安全的。
从您的主要上下文创建子上下文...
let childContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
childContext.parent = YOUR_MAIN_THREAD_CONTEXT
你现在使用这个子上下文创建你的NSManagedObject
,如果用户没有完成就离开了,那么只需将这个上下文设置为 nil 就可以了。
如果要提交,则保存子上下文,将其推送到main,然后将主上下文保存到推送到持久存储
func commitContext(childContext: NSManagedObjectContext?) {
do {
try childContext?.save()
do {
try MainThreadMoc.save()
} catch {
print("Error saving parent context")
}
} catch {
print("Error saving childContext")
}
}
如果在显示表单时上下文没有未提交的更改,您可以使用 rollback() API。它
removes everything from the undo stack, discards all insertions and deletions, and restores updated objects to their last committed values.
override public func willSave() {
if self.name != nil {
try? context.save()
}
else {
context.rollback()
}
}
有没有办法防止根据特定条件保存特定 NSManagedObjectModel
?
我知道我们可以在保存前使用willSave
修改对象,但是有没有办法阻止对象被保存?
override public func willSave() {
if self.name != nil {
// Save the object into context
}
else {
// Don't save the object into context
}
}
这个请求的原因是用户应该能够启动一个表单并插入一些值,然后他还可以转到其他屏幕并执行其他可以触发 context.save()
的操作,而我不希望在未完成的情况下保存表格。
我需要在上下文中创建此对象,因为该对象与上下文中的另一个对象有关系,如果我在上下文之外创建对象,我将需要更改所有关系的上下文。
提前致谢。
我知道你提到你不想使用不同的上下文,但使用不同的上下文确实是最好的方法。
如果您在主上下文中创建,即使不保存,数据仍然是 'in context'。分开是最安全的。 从您的主要上下文创建子上下文...
let childContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
childContext.parent = YOUR_MAIN_THREAD_CONTEXT
你现在使用这个子上下文创建你的NSManagedObject
,如果用户没有完成就离开了,那么只需将这个上下文设置为 nil 就可以了。
如果要提交,则保存子上下文,将其推送到main,然后将主上下文保存到推送到持久存储
func commitContext(childContext: NSManagedObjectContext?) {
do {
try childContext?.save()
do {
try MainThreadMoc.save()
} catch {
print("Error saving parent context")
}
} catch {
print("Error saving childContext")
}
}
如果在显示表单时上下文没有未提交的更改,您可以使用 rollback() API。它
removes everything from the undo stack, discards all insertions and deletions, and restores updated objects to their last committed values.
override public func willSave() {
if self.name != nil {
try? context.save()
}
else {
context.rollback()
}
}