CoreStore
public enum CoreStore
CoreStore
is the main entry point for all other APIs.
-
The default
DataStack
instance to be used. IfdefaultStack
is not set before the first time accessed, a default-configuredDataStack
will be created.See also
DataStack
Note
Changing thedefaultStack
is thread safe, but it is recommended to setupDataStacks
on a common queue (e.g. the main queue).Declaration
Swift
public static var defaultStack: DataStack { get set }
-
The
CoreStoreLogger
instance to be used. The default logger is an instance of aDefaultLogger
.Declaration
Swift
public static var logger: CoreStoreLogger
-
Asynchronously adds a
StorageInterface
to thedefaultStack
. Migrations are also initiated by default.CoreStore.addStorage( InMemoryStore(configuration: "Config1"), completion: { result in switch result { case .success(let storage): // ... case .failure(let error): // ... } } )
Declaration
Swift
public static func addStorage<T>(_ storage: T, completion: @escaping (SetupResult<T>) -> Void)
Parameters
storage
the storage
completion
the closure to be executed on the main queue when the process completes, either due to success or failure. The closure’s
SetupResult
argument indicates the result. Note that theStorageInterface
associated to theSetupResult.success
may not always be the same instance as the parameter argument if a previousStorageInterface
was already added at the same URL and with the same configuration. -
Asynchronously adds a
LocalStorage
to thedefaultStack
. Migrations are also initiated by default.let migrationProgress = CoreStore.addStorage( SQLiteStore(fileName: "core_data.sqlite", configuration: "Config1"), completion: { result in switch result { case .success(let storage): // ... case .failure(let error): // ... } } )
Declaration
Swift
public static func addStorage<T: LocalStorage>(_ storage: T, completion: @escaping (SetupResult<T>) -> Void) -> Progress?
Parameters
storage
the local storage
completion
the closure to be executed on the main queue when the process completes, either due to success or failure. The closure’s
SetupResult
argument indicates the result. Note that theLocalStorage
associated to theSetupResult.success
may not always be the same instance as the parameter argument if a previousLocalStorage
was already added at the same URL and with the same configuration.Return Value
a
Progress
instance if a migration has started, ornil
if either no migrations are required or if a failure occured. -
Asynchronously adds a
CloudStorage
to thedefaultStack
. Migrations are also initiated by default.guard let storage = ICloudStore( ubiquitousContentName: "MyAppCloudData", ubiquitousContentTransactionLogsSubdirectory: "logs/config1", ubiquitousContainerID: "iCloud.com.mycompany.myapp.containername", ubiquitousPeerToken: "9614d658014f4151a95d8048fb717cf0", configuration: "Config1", cloudStorageOptions: .recreateLocalStoreOnModelMismatch ) else { // iCloud is not available on the device return } let migrationProgress = dataStack.addStorage( storage, completion: { result in switch result { case .success(let storage): // ... case .failure(let error): // ... } } )
Declaration
Swift
public static func addStorage<T: CloudStorage>(_ storage: T, completion: @escaping (SetupResult<T>) -> Void)
Parameters
storage
the cloud storage
completion
the closure to be executed on the main queue when the process completes, either due to success or failure. The closure’s
SetupResult
argument indicates the result. Note that theCloudStorage
associated to theSetupResult.success
may not always be the same instance as the parameter argument if a previousCloudStorage
was already added at the same URL and with the same configuration. -
Migrates a local storage to match the
defaultStack
‘s managed object model version. This method does NOT add the migrated store to the data stack.Throws
aCoreStoreError
value indicating the failureDeclaration
Swift
public static func upgradeStorageIfNeeded<T: LocalStorage>(_ storage: T, completion: @escaping (MigrationResult) -> Void) throws -> Progress?
Parameters
storage
the local storage
completion
the closure to be executed on the main queue when the migration completes, either due to success or failure. The closure’s
MigrationResult
argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a.failure
result if an error occurs asynchronously.Return Value
a
Progress
instance if a migration has started, ornil
is no migrations are required -
Checks the migration steps required for the storage to match the
defaultStack
‘s managed object model version.Throws
aCoreStoreError
value indicating the failureDeclaration
Swift
public static func requiredMigrationsForStorage<T>(_ storage: T) throws -> [MigrationType] where T : LocalStorage
Parameters
storage
the local storage
Return Value
a
MigrationType
array indicating the migration steps required for the store, or an empty array if the file does not exist yet. Otherwise, an error is thrown if either inspection of the store failed, or if no mapping model was found/inferred.
-
Using the
defaultStack
, creates anObjectMonitor
for the specifiedDynamicObject
. MultipleObjectObserver
s may then register themselves to be notified when changes are made to theDynamicObject
.Declaration
Swift
public static func monitorObject<D>(_ object: D) -> ObjectMonitor<D> where D : DynamicObject
Parameters
object
the
DynamicObject
to observe changes fromReturn Value
a
ObjectMonitor
that monitors changes toobject
-
Using the
defaultStack
, creates aListMonitor
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 static func monitorList<D>(_ from: From<D>, _ fetchClauses: FetchClause...) -> ListMonitor<D> where D : 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 -
Using the
defaultStack
, creates aListMonitor
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 static func monitorList<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) -> ListMonitor<D> where D : 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 specifiedFetchChainableBuilderType
built from a chain of clauses.let monitor = CoreStore.monitorList( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public static func monitorList<B>(_ clauseChain: B) -> ListMonitor<B.ObjectType> where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
a
ListMonitor
for a list ofDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
-
Using the
defaultStack
, asynchronously creates aListMonitor
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 static func monitorList<D>(createAsynchronously: @escaping (ListMonitor<D>) -> Void, _ from: From<D>, _ fetchClauses: FetchClause...)
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. -
Using the
defaultStack
, asynchronously creates aListMonitor
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 static func monitorList<D>(createAsynchronously: @escaping (ListMonitor<D>) -> Void, _ from: From<D>, _ fetchClauses: [FetchClause])
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.CoreStore.monitorList( createAsynchronously: { (monitor) in self.monitor = monitor }, From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public static func monitorList<B: FetchChainableBuilderType>(createAsynchronously: @escaping (ListMonitor<B.ObjectType>) -> Void, _ clauseChain: B)
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instanceclauseChain
a
FetchChainableBuilderType
built from a chain of clauses -
Using the
defaultStack
, creates aListMonitor
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 static func monitorSectionedList<D>(_ from: From<D>, _ sectionBy: SectionBy<D>, _ fetchClauses: FetchClause...) -> ListMonitor<D> where D : 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 -
Using the
defaultStack
, creates aListMonitor
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 static func monitorSectionedList<D>(_ from: From<D>, _ sectionBy: SectionBy<D>, _ fetchClauses: [FetchClause]) -> ListMonitor<D> where D : 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 = CoreStore.monitorSectionedList( From<MyPersonEntity>() .sectionBy(\.age, { "\($0!) years old" }) .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public static 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
-
Using the
defaultStack
, asynchronously creates aListMonitor
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 static func monitorSectionedList<D>(createAsynchronously: @escaping (ListMonitor<D>) -> Void, _ from: From<D>, _ sectionBy: SectionBy<D>, _ fetchClauses: FetchClause...)
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. -
Using the
defaultStack
, asynchronously creates aListMonitor
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 static func monitorSectionedList<D>(createAsynchronously: @escaping (ListMonitor<D>) -> Void, _ from: From<D>, _ sectionBy: SectionBy<D>, _ fetchClauses: [FetchClause])
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.CoreStore.monitorSectionedList( createAsynchronously: { (monitor) in self.monitor = monitor }, From<MyPersonEntity>() .sectionBy(\.age, { "\($0!) years old" }) .where(\.age > 18) .orderBy(.ascending(\.age)) )
Declaration
Swift
public static func monitorSectionedList<B: SectionMonitorBuilderType>(createAsynchronously: @escaping (ListMonitor<B.ObjectType>) -> Void, _ clauseChain: B)
Parameters
createAsynchronously
the closure that receives the created
ListMonitor
instanceclauseChain
a
SectionMonitorBuilderType
built from a chain of clauses
-
Using the
defaultStack
, fetches theDynamicObject
instance in theDataStack
‘s context from a reference created from a transaction or from a different managed object context.Declaration
Swift
public static func fetchExisting<D>(_ object: D) -> D? where D : DynamicObject
Parameters
object
a reference to the object created/fetched outside the
DataStack
Return Value
the
DynamicObject
instance if the object exists in theDataStack
, ornil
if not found. -
Using the
defaultStack
, fetches theDynamicObject
instance in theDataStack
‘s context from anNSManagedObjectID
.Declaration
Swift
public static func fetchExisting<D>(_ objectID: NSManagedObjectID) -> D? where D : DynamicObject
Parameters
objectID
the
NSManagedObjectID
for the objectReturn Value
the
DynamicObject
instance if the object exists in theDataStack
, ornil
if not found. -
Using the
defaultStack
, fetches theDynamicObject
instances in theDataStack
‘s context from references created from a transaction or from a different managed object context.Declaration
Swift
public static func fetchExisting<D, S>(_ objects: S) -> [D] where D : DynamicObject, D == S.Element, S : Sequence
Parameters
objects
an array of
DynamicObject
s created/fetched outside theDataStack
Return Value
the
DynamicObject
array for objects that exists in theDataStack
-
Using the
defaultStack
, fetches theDynamicObject
instances in theDataStack
‘s context from a list ofNSManagedObjectID
.Declaration
Swift
public static func fetchExisting<D, S>(_ objectIDs: S) -> [D] where D : DynamicObject, S : Sequence, S.Element == NSManagedObjectID
Parameters
objectIDs
the
NSManagedObjectID
array for the objectsReturn Value
the
DynamicObject
array for objects that exists in theDataStack
-
Using the
defaultStack
, fetches the firstDynamicObject
instance that satisfies the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchOne<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> D? where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the first
DynamicObject
instance that satisfies the specifiedFetchClause
s, ornil
if no match was found -
Using the
defaultStack
, fetches the firstDynamicObject
instance that satisfies the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchOne<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> D? where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the first
DynamicObject
instance that satisfies the specifiedFetchClause
s, ornil
if no match was found -
Fetches the first
DynamicObject
instance that satisfies the specifiedFetchChainableBuilderType
built from a chain of clauses.let youngestTeen = CoreStore.fetchOne( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchOne<B>(_ clauseChain: B) throws -> B.ObjectType? where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
the first
DynamicObject
instance that satisfies the specifiedFetchChainableBuilderType
, ornil
if no match was found -
Using the
defaultStack
, fetches allDynamicObject
instances that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchAll<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> [D] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
all
DynamicObject
instances that satisfy the specifiedFetchClause
s, or an empty array if no match was found -
Using the
defaultStack
, fetches allDynamicObject
instances that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchAll<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [D] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
all
DynamicObject
instances that satisfy the specifiedFetchClause
s, or an empty array if no match was found -
Fetches all
DynamicObject
instances that satisfy the specifiedFetchChainableBuilderType
built from a chain of clauses.let people = CoreStore.fetchAll( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchAll<B>(_ clauseChain: B) throws -> [B.ObjectType] where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
all
DynamicObject
instances that satisfy the specifiedFetchChainableBuilderType
, or an empty array if no match was found -
Using the
defaultStack
, fetches the number ofDynamicObject
s that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchCount<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> Int where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the number of
DynamicObject
s that satisfy the specifiedFetchClause
s -
Using the
defaultStack
, fetches the number ofDynamicObject
s that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchCount<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> Int where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the number of
DynamicObject
s that satisfy the specifiedFetchClause
s -
Fetches the number of
DynamicObject
s that satisfy the specifiedFetchChainableBuilderType
built from a chain of clauses.let numberOfAdults = CoreStore.fetchCount( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchCount<B>(_ clauseChain: B) throws -> Int where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
the number of
DynamicObject
s that satisfy the specifiedFetchChainableBuilderType
-
Using the
defaultStack
, fetches theNSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> NSManagedObjectID? where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the
NSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchClause
s, ornil
if no match was found -
Using the
defaultStack
, fetches theNSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> NSManagedObjectID? where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the
NSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchClause
s, ornil
if no match was found -
Fetches the
NSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchChainableBuilderType
built from a chain of clauses.let youngestTeenID = CoreStore.fetchObjectID( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectID<B>(_ clauseChain: B) throws -> NSManagedObjectID? where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
the
NSManagedObjectID
for the firstDynamicObject
that satisfies the specifiedFetchChainableBuilderType
, ornil
if no match was found -
Using the
defaultStack
, fetches theNSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> [NSManagedObjectID] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the
NSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchClause
s, or an empty array if no match was found -
Using the
defaultStack
, fetches theNSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchClause
s. AcceptsWhere
,OrderBy
, andTweak
clauses.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [NSManagedObjectID] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typefetchClauses
a series of
FetchClause
instances for the fetch request. AcceptsWhere
,OrderBy
, andTweak
clauses.Return Value
the
NSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchClause
s, or an empty array if no match was found -
Fetches the
NSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
built from a chain of clauses.let idsOfAdults = transaction.fetchObjectIDs( From<MyPersonEntity>() .where(\.age > 18) .orderBy(.ascending(\.age)) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func fetchObjectIDs<B>(_ clauseChain: B) throws -> [NSManagedObjectID] where B : FetchChainableBuilderType
Parameters
clauseChain
a
FetchChainableBuilderType
built from a chain of clausesReturn Value
the
NSManagedObjectID
for allDynamicObject
s that satisfy the specifiedFetchChainableBuilderType
, or an empty array if no match was found -
Using the
defaultStack
, queries aggregate values as specified by theQueryClause
s. Requires at least aSelect
clause, and optionalWhere
,OrderBy
,GroupBy
, andTweak
clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryValue<D, U>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: QueryClause...) throws -> U? where D : DynamicObject, U : QueryableAttributeType
Parameters
from
a
From
clause indicating the entity typeselectClause
a
Select<U>
clause indicating the properties to fetch, and with the generic type indicating the return type.queryClauses
a series of
QueryClause
instances for the query request. AcceptsWhere
,OrderBy
,GroupBy
, andTweak
clauses.Return Value
the result of the the query, or
nil
if no match was found. The type of the return value is specified by the generic type of theSelect<U>
parameter. -
Using the
defaultStack
, queries aggregate values as specified by theQueryClause
s. Requires at least aSelect
clause, and optionalWhere
,OrderBy
,GroupBy
, andTweak
clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryValue<D, U>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: [QueryClause]) throws -> U? where D : DynamicObject, U : QueryableAttributeType
Parameters
from
a
From
clause indicating the entity typeselectClause
a
Select<U>
clause indicating the properties to fetch, and with the generic type indicating the return type.queryClauses
a series of
QueryClause
instances for the query request. AcceptsWhere
,OrderBy
,GroupBy
, andTweak
clauses.Return Value
the result of the the query, or
nil
if no match was found. The type of the return value is specified by the generic type of theSelect<U>
parameter. -
Queries a property value or aggregate as specified by the
QueryChainableBuilderType
built from a chain of clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.let averageAdultAge = CoreStore.queryValue( From<MyPersonEntity>() .select(Int.self, .average(\.age)) .where(\.age > 18) )
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryValue<B>(_ clauseChain: B) throws -> B.ResultType? where B : QueryChainableBuilderType, B.ResultType : QueryableAttributeType
Parameters
clauseChain
a
QueryChainableBuilderType
indicating the property/aggregate to fetch and the series of queries for the request.Return Value
the result of the the query as specified by the
QueryChainableBuilderType
, ornil
if no match was found. -
Using the
defaultStack
, queries a dictionary of attribute values as specified by theQueryClause
s. Requires at least aSelect
clause, and optionalWhere
,OrderBy
,GroupBy
, andTweak
clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: QueryClause...) throws -> [[String : Any]] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typeselectClause
a
Select<U>
clause indicating the properties to fetch, and with the generic type indicating the return type.queryClauses
a series of
QueryClause
instances for the query request. AcceptsWhere
,OrderBy
,GroupBy
, andTweak
clauses.Return Value
the result of the the query. The type of the return value is specified by the generic type of the
Select<U>
parameter. -
Using the
defaultStack
, queries a dictionary of attribute values as specified by theQueryClause
s. Requires at least aSelect
clause, and optionalWhere
,OrderBy
,GroupBy
, andTweak
clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: [QueryClause]) throws -> [[String : Any]] where D : DynamicObject
Parameters
from
a
From
clause indicating the entity typeselectClause
a
Select<U>
clause indicating the properties to fetch, and with the generic type indicating the return type.queryClauses
a series of
QueryClause
instances for the query request. AcceptsWhere
,OrderBy
,GroupBy
, andTweak
clauses.Return Value
the result of the the query. The type of the return value is specified by the generic type of the
Select<U>
parameter. -
Queries a dictionary of attribute values or as specified by the
QueryChainableBuilderType
built from a chain of clauses.A
query
differs from afetch
in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.let results = CoreStore.queryAttributes( From<MyPersonEntity>() .select( NSDictionary.self, .attribute(\.age, as: "age"), .count(\.age, as: "numberOfPeople") ) .groupBy(\.age) ) for dictionary in results! { let age = dictionary["age"] as! Int let count = dictionary["numberOfPeople"] as! Int print("There are \(count) people who are \(age) years old." }
Throws
CoreStoreError.persistentStoreNotFound
if the specified entity could not be found in any store’s schema.Declaration
Swift
public static func queryAttributes<B>(_ clauseChain: B) throws -> [[String : Any]] where B : QueryChainableBuilderType, B.ResultType == NSDictionary
Parameters
clauseChain
a
QueryChainableBuilderType
indicating the properties to fetch and the series of queries for the request.Return Value
the result of the the query as specified by the
QueryChainableBuilderType
-
Returns the
defaultStack
‘s model version. The version string is the same as the name of a version-specific .xcdatamodeld file orCoreStoreSchema
.Declaration
Swift
public static var modelVersion: String { get }
-
Returns the entity name-to-class type mapping from the
defaultStack
‘s model.Declaration
Swift
public static func entityTypesByName(for type: NSManagedObject.Type) -> [EntityName : NSManagedObject.Type]
-
Returns the entity name-to-class type mapping from the
defaultStack
‘s model.Declaration
Swift
public static func entityTypesByName(for type: CoreStoreObject.Type) -> [EntityName : CoreStoreObject.Type]
-
Returns the
NSEntityDescription
for the specifiedNSManagedObject
subclass fromdefaultStack
‘s model.Declaration
Swift
public static func entityDescription(for type: NSManagedObject.Type) -> NSEntityDescription?
-
Returns the
NSEntityDescription
for the specifiedCoreStoreObject
subclass fromdefaultStack
‘s model.Declaration
Swift
public static func entityDescription(for type: CoreStoreObject.Type) -> NSEntityDescription?
-
Creates an
SQLiteStore
with default parameters and adds it to thedefaultStack
. This method blocks until completion.try CoreStore.addStorageAndWait()
Declaration
Swift
@discardableResult public static func addStorageAndWait() throws -> SQLiteStore
Return Value
the local SQLite storage added to the
defaultStack
-
Adds a
StorageInterface
to thedefaultStack
and blocks until completion.try CoreStore.addStorageAndWait(InMemoryStore(configuration: "Config1"))
Throws
aCoreStoreError
value indicating the failureDeclaration
Swift
@discardableResult public static func addStorageAndWait<T>(_ storage: T) throws -> T where T : StorageInterface
Parameters
storage
the
StorageInterface
Return Value
the
StorageInterface
added to thedefaultStack
-
Adds a
LocalStorage
to thedefaultStack
and blocks until completion.try CoreStore.addStorageAndWait(SQLiteStore(configuration: "Config1"))
Throws
aCoreStoreError
value indicating the failureDeclaration
Swift
@discardableResult public static func addStorageAndWait<T>(_ storage: T) throws -> T where T : LocalStorage
Parameters
storage
the local storage
Return Value
the local storage added to the
defaultStack
. Note that this may not always be the same instance as the parameter argument if a previousLocalStorage
was already added at the same URL and with the same configuration. -
Adds a
CloudStorage
to thedefaultStack
and blocks until completion.guard let storage = ICloudStore( ubiquitousContentName: "MyAppCloudData", ubiquitousContentTransactionLogsSubdirectory: "logs/config1", ubiquitousContainerID: "iCloud.com.mycompany.myapp.containername", ubiquitousPeerToken: "9614d658014f4151a95d8048fb717cf0", configuration: "Config1", cloudStorageOptions: .recreateLocalStoreOnModelMismatch ) else { // iCloud is not available on the device return } try CoreStore.addStorageAndWait(storage)
Throws
aCoreStoreError
value indicating the failureDeclaration
Swift
@discardableResult public static func addStorageAndWait<T>(_ storage: T) throws -> T where T : CloudStorage
Parameters
storage
the local storage
Return Value
the cloud storage added to the stack. Note that this may not always be the same instance as the parameter argument if a previous
CloudStorage
was already added at the same URL and with the same configuration.
-
Using the
defaultStack
, performs a transaction asynchronously whereNSManagedObject
orCoreStoreObject
creates, updates, and deletes can be made. The changes are commited automatically after thetask
closure returns. On success, the value returned from closure will be the wrapped as.success(T)
in thecompletion
‘sResult<T>
. Any errors thrown from inside thetask
will be reported as.failure(CoreStoreError)
. To cancel/rollback changes, calltry transaction.cancel()
, which throws aCoreStoreError.userCancelled
.Declaration
Swift
public static func perform<T>(asynchronous task: @escaping (_ transaction: AsynchronousDataTransaction) throws -> T, completion: @escaping (AsynchronousDataTransaction.Result<T>) -> Void)
Parameters
task
the asynchronous closure where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent
NSManagedObjectContext
.completion
the closure executed after the save completes. The
Result
argument of the closure will either wrap the return value oftask
, or any uncaught errors thrown from withintask
. Cancelledtask
s will be indicated by.failure(error: CoreStoreError.userCancelled)
. Custom errors thrown by the user will be wrapped inCoreStoreError.userError(error: Error)
. -
Using the
defaultStack
, performs a transaction asynchronously whereNSManagedObject
orCoreStoreObject
creates, updates, and deletes can be made. The changes are commited automatically after thetask
closure returns. On success, the value returned from closure will be the argument of thesuccess
closure. Any errors thrown from inside thetask
will be wrapped in aCoreStoreError
and reported in thefailure
closure. To cancel/rollback changes, calltry transaction.cancel()
, which throws aCoreStoreError.userCancelled
.Declaration
Swift
public static func perform<T>(asynchronous task: @escaping (_ transaction: AsynchronousDataTransaction) throws -> T, success: @escaping (T) -> Void, failure: @escaping (CoreStoreError) -> Void)
Parameters
task
the asynchronous closure where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent
NSManagedObjectContext
.success
the closure executed after the save succeeds. The
T
argument of the closure will be the value returned fromtask
.failure
the closure executed if the save fails or if any errors are thrown within
task
. Cancelledtask
s will be indicated byCoreStoreError.userCancelled
. Custom errors thrown by the user will be wrapped inCoreStoreError.userError(error: Error)
. -
Using the
defaultStack
, performs a transaction synchronously whereNSManagedObject
orCoreStoreObject
creates, updates, and deletes can be made. The changes are commited automatically after thetask
closure returns. On success, the value returned from closure will be the return value ofperform(synchronous:)
. Any errors thrown from inside thetask
will be thrown fromperform(synchronous:)
. To cancel/rollback changes, calltry transaction.cancel()
, which throws aCoreStoreError.userCancelled
.Throws
aCoreStoreError
value indicating the failure. Cancelledtask
s will be indicated byCoreStoreError.userCancelled
. Custom errors thrown by the user will be wrapped inCoreStoreError.userError(error: Error)
.Declaration
Swift
public static func perform<T>(synchronous task: ((_ transaction: SynchronousDataTransaction) throws -> T), waitForAllObservers: Bool = true) throws -> T
Parameters
task
the synchronous non-escaping closure where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent
NSManagedObjectContext
.waitForAllObservers
When
true
, this method waits for all observers to be notified of the changes before returning. This results in more predictable data update order, but may risk triggering deadlocks. Whenfalse
, this method does not wait for observers to be notified of the changes before returning. This results in lower risk for deadlocks, but the updated data may not have been propagated to theDataStack
after returning. Defaults totrue
.Return Value
the value returned from
task
-
Using the
defaultStack
, begins a non-contiguous transaction whereNSManagedObject
orCoreStoreObject
creates, updates, and deletes can be made. This is useful for making temporary changes, such as partially filled forms.- prameter 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.
Declaration
Swift
public static func beginUnsafe(supportsUndo: Bool = false) -> UnsafeDataTransaction
Return Value
a
UnsafeDataTransaction
instance where creates, updates, and deletes can be made. - prameter supportsUndo:
-
Refreshes all registered objects
NSManagedObject
s orCoreStoreObject
s in thedefaultStack
.Declaration
Swift
public static func refreshAndMergeAllObjects()