mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-26 03:11:30 +01:00
Deprecated rollback() on async and sync transactions. Added undo utilities to unsafe transactions.
This commit is contained in:
@@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.3.3</string>
|
<string>1.3.4</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@@ -190,16 +190,21 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Rolls back the transaction by resetting the `NSManagedObjectContext`. After calling this method, all `NSManagedObjects` fetched within the transaction will become invalid. This method should not be used after the `commit()` method was already called once.
|
Rolls back the transaction by resetting the `NSManagedObjectContext`. After calling this method, all `NSManagedObjects` fetched within the transaction will become invalid. This method should not be used after the `commit()` method was already called once.
|
||||||
*/
|
*/
|
||||||
public override func rollback() {
|
@available(*, deprecated=1.3.4, message="Resetting the context is inherently unsafe. This method will be removed in the near future. Use `beginUnsafe()` to create transactions with `undo` support.")
|
||||||
|
public func rollback() {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to rollback an already committed \(typeName(self))."
|
"Attempted to rollback an already committed \(typeName(self))."
|
||||||
)
|
)
|
||||||
|
CoreStore.assert(
|
||||||
|
self.transactionQueue.isCurrentExecutionContext(),
|
||||||
|
"Attempted to rollback a \(typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
|
||||||
super.rollback()
|
self.context.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -210,6 +215,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
self.closure = closure
|
self.closure = closure
|
||||||
|
|
||||||
super.init(mainContext: mainContext, queue: queue)
|
super.init(mainContext: mainContext, queue: queue)
|
||||||
|
self.context.undoManager = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func perform() {
|
internal func perform() {
|
||||||
|
|||||||
@@ -186,21 +186,6 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
objects.forEach { context.fetchExisting($0)?.deleteFromContext() }
|
objects.forEach { context.fetchExisting($0)?.deleteFromContext() }
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Saving changes
|
|
||||||
|
|
||||||
/**
|
|
||||||
Rolls back the transaction by resetting the `NSManagedObjectContext`. After calling this method, all `NSManagedObjects` fetched within the transaction will become invalid.
|
|
||||||
*/
|
|
||||||
public func rollback() {
|
|
||||||
|
|
||||||
CoreStore.assert(
|
|
||||||
self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(),
|
|
||||||
"Attempted to rollback a \(typeName(self)) outside its designated queue."
|
|
||||||
)
|
|
||||||
|
|
||||||
self.context.reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// MARK: Internal
|
// MARK: Internal
|
||||||
|
|
||||||
|
|||||||
@@ -181,15 +181,20 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Rolls back the transaction by resetting the `NSManagedObjectContext`. After calling this method, all `NSManagedObjects` fetched within the transaction will become invalid. This method should not be used after the `commit()` method was already called once.
|
Rolls back the transaction by resetting the `NSManagedObjectContext`. After calling this method, all `NSManagedObjects` fetched within the transaction will become invalid. This method should not be used after the `commit()` method was already called once.
|
||||||
*/
|
*/
|
||||||
public override func rollback() {
|
@available(*, deprecated=1.3.4, message="Resetting the context is inherently unsafe. This method will be removed in the near future. Use `beginUnsafe()` to create transactions with `undo` support.")
|
||||||
|
public func rollback() {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to rollback an already committed \(typeName(self))."
|
"Attempted to rollback an already committed \(typeName(self))."
|
||||||
)
|
)
|
||||||
|
CoreStore.assert(
|
||||||
|
self.transactionQueue.isCurrentExecutionContext(),
|
||||||
|
"Attempted to rollback a \(typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
|
||||||
super.rollback()
|
self.context.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -217,6 +222,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
|
|||||||
self.closure = closure
|
self.closure = closure
|
||||||
|
|
||||||
super.init(mainContext: mainContext, queue: queue)
|
super.init(mainContext: mainContext, queue: queue)
|
||||||
|
self.context.undoManager = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,30 @@ public final class UnsafeDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Rolls back the transaction.
|
||||||
|
*/
|
||||||
|
public func rollback() {
|
||||||
|
|
||||||
|
self.context.rollback()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Undo's the last change made to the transaction.
|
||||||
|
*/
|
||||||
|
public func undo() {
|
||||||
|
|
||||||
|
self.context.undo()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Redo's the last undone change to the transaction.
|
||||||
|
*/
|
||||||
|
public func redo() {
|
||||||
|
|
||||||
|
self.context.redo()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Begins a child transaction where `NSManagedObject` creates, updates, and deletes can be made. This is useful for making temporary changes, such as partially filled forms.
|
Begins a child transaction where `NSManagedObject` creates, updates, and deletes can be made. This is useful for making temporary changes, such as partially filled forms.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user