UnsafeDataTransaction
public final class UnsafeDataTransaction : BaseDataTransaction
extension UnsafeDataTransaction: CustomDebugStringConvertible, CoreStoreDebugStringConvertible
The UnsafeDataTransaction
provides an interface for non-contiguous NSManagedObject
or CoreStoreObject
creates, updates, and deletes. This is useful for making temporary changes, such as partially filled forms. An unsafe transaction object should typically be only used from the main queue.
-
Saves the transaction changes asynchronously. For an
UnsafeDataTransaction
, multiple commits are allowed, although it is the developer’s responsibility to ensure a reasonable leeway to prevent blocking the main thread.Declaration
Swift
public func commit(_ completion: @escaping (_ error: CoreStoreError?) -> Void)
Parameters
completion
the block executed after the save completes. Success or failure is reported by the optional
error
argument of the block. -
Saves the transaction changes and waits for completion synchronously. For an
UnsafeDataTransaction
, multiple commits are allowed, although it is the developer’s responsibility to ensure a reasonable leeway to prevent blocking the main thread.Throws
aCoreStoreError
value indicating the failure.Declaration
Swift
public func commitAndWait() throws
-
Rolls back the transaction.
Declaration
Swift
public func rollback()
-
Undo’s the last change made to the transaction.
Declaration
Swift
public func undo()
-
Immediately flushes all pending changes to the transaction’s observers. This is useful in conjunction with
ListMonitor
s andObjectMonitor
s created fromUnsafeDataTransaction
s used to manage temporary “scratch” data.Important
Note that unlikecommit()
,flush()
does not propagate/save updates to theDataStack
and the persistent store. However, the flushed changes will be seen by children transactions created further from the current transaction (i.e. throughtransaction.beginUnsafe()
)Throws
an error thrown fromclosure
, or an error thrown by Core Data (usually validation errors or conflict errors)Declaration
Swift
public func flush()
-
Flushes all pending changes to the transaction’s observers at the end of the
closure
‘s execution. This is useful in conjunction withListMonitor
s andObjectMonitor
s created fromUnsafeDataTransaction
s used to manage temporary “scratch” data.Important
Note that unlikecommit()
,flush()
does not propagate/save updates to theDataStack
and the persistent store. However, the flushed changes will be seen by children transactions created further from the current transaction (i.e. throughtransaction.beginUnsafe()
)Throws
an error thrown fromclosure
, or an error thrown by Core Data (usually validation errors or conflict errors)Declaration
Swift
public func flush(closure: () throws -> Void) rethrows
Parameters
closure
the closure where changes can be made prior to the flush
-
Redo’s the last undone change to the transaction.
Declaration
Swift
public func redo()
-
Begins a child transaction where
NSManagedObject
orCoreStoreObject
creates, updates, and deletes can be made. This is useful for making temporary changes, such as partially filled forms.Declaration
Swift
public func beginUnsafe( supportsUndo: Bool = false, sourceIdentifier: Any? = nil ) -> UnsafeDataTransaction
Parameters
supportsUndo
undo()
,redo()
, androllback()
methods are only available when this parameter istrue
, otherwise those method will raise an exception. Defaults tofalse
. Note that turning on Undo support may heavily impact performance especially on iOS or watchOS where memory is limited.sourceIdentifier
an optional value that identifies the source of this transaction. This identifier will be passed to the change notifications and callers can use it for custom handling that depends on the source.
Return Value
an
UnsafeDataTransaction
instance where creates, updates, and deletes can be made.
-
Declaration
Swift
public var debugDescription: String { get }
-
Utility for creating an
NSFetchedResultsController
from theUnsafeDataTransaction
. This is useful when anNSFetchedResultsController
is preferred over the overhead ofListMonitor
s abstraction.Note
It is the caller’s responsibility to call
performFetch()
on the createdNSFetchedResultsController
.Declaration
Swift
@nonobjc public func createFetchedResultsController<O>(_ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: FetchClause...) -> NSFetchedResultsController<O> where O : NSManagedObject
Parameters
from
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sectionsfetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
an
NSFetchedResultsController
that observes theUnsafeDataTransaction
-
Utility for creating an
NSFetchedResultsController
from theUnsafeDataTransaction
. This is useful when anNSFetchedResultsController
is preferred over the overhead ofListMonitor
s abstraction.Note
It is the caller’s responsibility to call
performFetch()
on the createdNSFetchedResultsController
.Declaration
Swift
@nonobjc public func createFetchedResultsController<O>(_ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController<O> where O : NSManagedObject
Parameters
from
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sectionsfetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
an
NSFetchedResultsController
that observes theUnsafeDataTransaction
-
Utility for creating an
NSFetchedResultsController
from theUnsafeDataTransaction
. This is useful when anNSFetchedResultsController
is preferred over the overhead ofListMonitor
s abstraction.Note
It is the caller’s responsibility to call
performFetch()
on the createdNSFetchedResultsController
.Declaration
Swift
@nonobjc public func createFetchedResultsController<O>(_ from: From<O>, _ fetchClauses: FetchClause...) -> NSFetchedResultsController<O> where O : NSManagedObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
an
NSFetchedResultsController
that observes theUnsafeDataTransaction
-
Utility for creating an
NSFetchedResultsController
from theUnsafeDataTransaction
. This is useful when anNSFetchedResultsController
is preferred over the overhead ofListMonitor
s abstraction.Note
It is the caller’s responsibility to call
performFetch()
on the createdNSFetchedResultsController
.Declaration
Swift
@nonobjc public func createFetchedResultsController<O>(_ from: From<O>, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController<O> where O : NSManagedObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
an
NSFetchedResultsController
that observes theUnsafeDataTransaction
-
Creates an
ObjectMonitor
for the specifiedDynamicObject
. MultipleObjectObserver
s may then register themselves to be notified when changes are made to theDynamicObject
.Declaration
Swift
public func monitorObject<O>(_ object: O) -> ObjectMonitor<O> where O : DynamicObject
Parameters
object
the
DynamicObject
to observe changes fromReturn Value
an
ObjectMonitor
that monitors changes toobject
-
Creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list.Declaration
Swift
public func monitorList<O>(_ from: From<O>, _ fetchClauses: FetchClause...) -> ListMonitor<O> where O : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
a
ListMonitor
instance that monitors changes to the list -
Creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list.Declaration
Swift
public func monitorList<O>(_ from: From<O>, _ fetchClauses: [FetchClause]) -> ListMonitor<O> where O : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
a
ListMonitor
instance that monitors changes to the list -
Asynchronously creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
built from a chain of clauses. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.transaction.monitorList( { (monitor) in self.monitor = monitor }, From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public func monitorList<B>(_ clauseChain: B) -> ListMonitor<B.ObjectType> where B : FetchChainableBuilderType
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instanceclauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
a
ListMonitor
for a list ofDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
-
Asynchronously creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.Declaration
Swift
public func monitorList<O>(createAsynchronously: @escaping (ListMonitor<O>) -> Void, _ from: From<O>, _ fetchClauses: FetchClause...) where O : DynamicObject
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instancefrom
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses. -
Asynchronously creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.Declaration
Swift
public func monitorList<O>(createAsynchronously: @escaping (ListMonitor<O>) -> Void, _ from: From<O>, _ fetchClauses: [FetchClause]) where O : DynamicObject
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instancefrom
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses. -
Asynchronously creates a
ListMonitor
for a list ofDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
built from a chain of clauses. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.dataStack.monitorList( createAsynchronously: { (monitor) in self.monitor = monitor }, From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public func monitorList<B>(createAsynchronously: @escaping (ListMonitor<B.ObjectType>) -> Void, _ clauseChain: B) where B : FetchChainableBuilderType
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instanceclauseChain
a
FetchChainableBuilderType
built from a chain of clauses -
Creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list.Declaration
Swift
public func monitorSectionedList<O>(_ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: FetchClause...) -> ListMonitor<O> where O : DynamicObject
Parameters
from
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sections.fetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
a
ListMonitor
instance that monitors changes to the list -
Creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list.Declaration
Swift
public func monitorSectionedList<O>(_ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: [FetchClause]) -> ListMonitor<O> where O : DynamicObject
Parameters
from
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sections.fetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
a
ListMonitor
instance that monitors changes to the list -
Creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specifiedSectionMonitorBuilderType
built from a chain of clauses.let monitor = transaction.monitorSectionedList( From<MyPersonEntity>() .sectionBy(\.age, { "\($0!) years old" }) .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public func monitorSectionedList<B>(_ clauseChain: B) -> ListMonitor<B.ObjectType> where B : SectionMonitorBuilderType
Parameters
clauseChain
a
SectionMonitorBuilderType
built from a chain of clausesReturn Value
a
ListMonitor
for a list ofDynamicObject
s that satisfy the specifiedSectionMonitorBuilderType
-
Asynchronously creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.Declaration
Swift
public func monitorSectionedList<O>(createAsynchronously: @escaping (ListMonitor<O>) -> Void, _ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: FetchClause...) where O : DynamicObject
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instancefrom
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sections.fetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses. -
Asynchronously creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specified fetch clauses. MultipleListObserver
s may then register themselves to be notified when changes are made to the list. SinceNSFetchedResultsController
greedily locks the persistent store on initial fetch, you may prefer this method instead of the synchronous counterpart to avoid deadlocks while background updates/saves are being executed.Declaration
Swift
public func monitorSectionedList<O>(createAsynchronously: @escaping (ListMonitor<O>) -> Void, _ from: From<O>, _ sectionBy: SectionBy<O>, _ fetchClauses: [FetchClause]) where O : DynamicObject
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instancefrom
a
From
clause indicating the entity typesectionBy
a
SectionBy
clause indicating the keyPath for the attribute to use when sorting the list into sections.fetchClauses
a series of
FetchClause
instances for fetching the object list. AcceptsWhere
,OrderBy
, andTweak
clauses. -
Asynchronously creates a
ListMonitor
for a sectioned list ofDynamicObject
s that satisfy the specifiedSectionMonitorBuilderType
built from a chain of clauses.transaction.monitorSectionedList( { (monitor) in self.monitor = monitor }, From<MyPersonEntity>() .sectionBy(\.age, { "\($0!) years old" }) .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public func monitorSectionedList<B>(createAsynchronously: @escaping (ListMonitor<B.ObjectType>) -> Void, _ clauseChain: B) where B : SectionMonitorBuilderType
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instanceclauseChain
a
SectionMonitorBuilderType
built from a chain of clauses