CSDataStack

@objc
public final class CSDataStack : NSObject, CoreStoreObjectiveCType

The CSDataStack serves as the Objective-C bridging type for DataStack.

See also

DataStack
  • Initializes a CSDataStack with default settings. CoreStore searches for .xcdatamodeld from the main NSBundle and loads an NSManagedObjectModel from it. An assertion is raised if the model could not be found.

    Declaration

    Swift

    @objc
    public convenience override init()
  • Initializes a CSDataStack from the model with the specified modelName in the specified bundle.

    Declaration

    Swift

    @objc
    public convenience init(xcodeModelName: XcodeDataModelFileName?, bundle: Bundle?, versionChain: [String]?)

    Parameters

    xcodeModelName

    the name of the (.xcdatamodeld) model file. If not specified, the application name (CFBundleName) will be used if it exists, or CoreData if it the bundle name was not set.

    bundle

    an optional bundle to load .xcdatamodeld models from. If not specified, the main bundle will be used.

    versionChain

    the version strings that indicate the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.

  • Returns the stack’s model version. The version string is the same as the name of the version-specific .xcdatamodeld file.

    Declaration

    Swift

    @objc
    public var modelVersion: String { get }
  • Returns the entity name-to-class type mapping from the CSDataStack‘s model.

    Declaration

    Swift

    @objc
    public func entityTypesByNameForType(_ type: NSManagedObject.Type) -> [EntityName : NSManagedObject.Type]
  • Returns the NSEntityDescription for the specified NSManagedObject subclass from stack’s model.

    Declaration

    Swift

    @objc
    public func entityDescriptionForClass(_ type: NSManagedObject.Type) -> NSEntityDescription?
  • Creates an CSInMemoryStore with default parameters and adds it to the stack. This method blocks until completion.

    CSSQLiteStore *storage = [dataStack addInMemoryStorageAndWaitAndReturnError:&error];
    

    Declaration

    Swift

    @discardableResult
    @objc
    public func addInMemoryStorageAndWaitAndReturnError(_ error: NSErrorPointer) -> CSInMemoryStore?

    Parameters

    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    the CSInMemoryStore added to the stack

  • Creates an CSSQLiteStore with default parameters and adds it to the stack. This method blocks until completion.

    CSSQLiteStore *storage = [dataStack addSQLiteStorageAndWaitAndReturnError:&error];
    

    Declaration

    Swift

    @discardableResult
    @objc
    public func addSQLiteStorageAndWaitAndReturnError(_ error: NSErrorPointer) -> CSSQLiteStore?

    Parameters

    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    the CSSQLiteStore added to the stack

  • Adds a CSInMemoryStore to the stack and blocks until completion.

    NSError *error;
    CSInMemoryStore *storage = [dataStack
        addStorageAndWait: [[CSInMemoryStore alloc] initWithConfiguration: @"Config1"]
        error: &error];
    

    Declaration

    Swift

    @discardableResult
    @objc
    public func addInMemoryStorageAndWait(_ storage: CSInMemoryStore, error: NSErrorPointer) -> CSInMemoryStore?

    Parameters

    storage
    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    the CSInMemoryStore added to the stack

  • Adds a CSSQLiteStore to the stack and blocks until completion.

    NSError *error;
    CSSQLiteStore *storage = [dataStack
        addStorageAndWait: [[CSSQLiteStore alloc] initWithConfiguration: @"Config1"]
        error: &error];
    

    Declaration

    Swift

    @discardableResult
    @objc
    public func addSQLiteStorageAndWait(_ storage: CSSQLiteStore, error: NSErrorPointer) -> CSSQLiteStore?

    Parameters

    storage
    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    the CSSQLiteStore added to the stack

  • Asynchronously adds a CSInMemoryStore to the stack. Migrations are also initiated by default.

    NSError *error;
    NSProgress *migrationProgress = [dataStack 
        addInMemoryStorage:[CSInMemoryStore new]
        completion:^(CSSetupResult *result) {
            if (result.isSuccess) {
                // ...
            }
        }
        error: &error];
    

    Declaration

    Swift

    @objc
    public func addInMemoryStorage(_ storage: CSInMemoryStore, completion: @escaping (CSSetupResult) -> Void)

    Parameters

    storage

    the CSInMemoryStore instance

    completion

    the closure to be executed on the main queue when the process completes, either due to success or failure. The closure’s CSSetupResult argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a failure CSSetupResult result if an error occurs asynchronously.

  • Asynchronously adds a CSSQLiteStore to the stack. Migrations are also initiated by default.

    NSError *error;
    NSProgress *migrationProgress = [dataStack
        addInMemoryStorage:[[CSSQLiteStore alloc] 
            initWithFileName:@"core_data.sqlite"
            configuration:@"Config1"]
        completion:^(CSSetupResult *result) {
            if (result.isSuccess) {
                // ...
            }
        }
        error: &error];
    

    Declaration

    Swift

    @objc
    public func addSQLiteStorage(_ storage: CSSQLiteStore, completion: @escaping (CSSetupResult) -> Void, error: NSErrorPointer) -> Progress?

    Parameters

    storage

    the CSSQLiteStore instance

    completion

    the closure to be executed on the main queue when the process completes, either due to success or failure. The closure’s CSSetupResult argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a failure CSSetupResult result if an error occurs asynchronously. Note that the CSLocalStorage associated to the -[CSSetupResult storage] may not always be the same instance as the parameter argument if a previous CSLocalStorage was already added at the same URL and with the same configuration.

    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    an NSProgress instance if a migration has started. nil if no migrations are required or if error was set.

  • Migrates a CSSQLiteStore to match the CSDataStack‘s managed object model version. This method does NOT add the migrated store to the data stack.

    Declaration

    Swift

    @objc
    public func upgradeStorageIfNeeded(_ storage: CSSQLiteStore, completion: @escaping (CSMigrationResult) -> Void, error: NSErrorPointer) -> Progress?

    Parameters

    storage

    the CSSQLiteStore instance

    completion

    the closure to be executed on the main queue when the migration completes, either due to success or failure. The closure’s CSMigrationResult argument indicates the result. This closure is NOT executed if an error is thrown, but will be executed with a failure CSSetupResult result if an error occurs asynchronously.

    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    an NSProgress instance if a migration has started. nil if no migrations are required or if error was set.

  • Checks the migration steps required for the CSSQLiteStore to match the CSDataStack‘s managed object model version.

    Declaration

    Swift

    @objc
    public func requiredMigrationsForSQLiteStore(_ storage: CSSQLiteStore, error: NSErrorPointer) -> [CSMigrationType]?

    Parameters

    storage

    the CSSQLiteStore instance

    error

    the NSError pointer that indicates the reason in case of an failure

    Return Value

    a CSMigrationType array indicating the migration steps required for the store, or an empty array if the file does not exist yet. Otherwise, nil is returned and the error argument is set if either inspection of the store failed, or if no mapping model was found/inferred.

  • Fetches the NSManagedObject instance in the transaction’s context from a reference created from a transaction or from a different managed object context.

    Declaration

    Swift

    @objc
    public func fetchExistingObject(_ object: NSManagedObject) -> Any?

    Parameters

    object

    a reference to the object created/fetched outside the transaction

    Return Value

    the NSManagedObject instance if the object exists in the transaction, or nil if not found.

  • Fetches the NSManagedObject instance in the transaction’s context from an NSManagedObjectID.

    Declaration

    Swift

    @objc
    public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any?

    Parameters

    objectID

    the NSManagedObjectID for the object

    Return Value

    the NSManagedObject instance if the object exists in the transaction, or nil if not found.

  • Fetches the NSManagedObject instances in the transaction’s context from references created from a transaction or from a different managed object context.

    Declaration

    Swift

    @objc
    public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any]

    Parameters

    objects

    an array of NSManagedObjects created/fetched outside the transaction

    Return Value

    the NSManagedObject array for objects that exists in the transaction

  • Fetches the NSManagedObject instances in the transaction’s context from a list of NSManagedObjectID.

    Declaration

    Swift

    @objc
    public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any]

    Parameters

    objectIDs

    the NSManagedObjectID array for the objects

    Return Value

    the NSManagedObject array for objects that exists in the transaction

  • Fetches the first NSManagedObject instance that satisfies the specified CSFetchClauses. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Declaration

    Swift

    @objc
    public func fetchOneFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> Any?

    Parameters

    from

    a From clause indicating the entity type

    fetchClauses

    a series of CSFetchClause instances for the fetch request. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Return Value

    the first NSManagedObject instance that satisfies the specified CSFetchClauses

  • Fetches all NSManagedObject instances that satisfy the specified CSFetchClauses. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Declaration

    Swift

    @objc
    public func fetchAllFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> [Any]?

    Parameters

    from

    a CSFrom clause indicating the entity type

    fetchClauses

    a series of CSFetchClause instances for the fetch request. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Return Value

    all NSManagedObject instances that satisfy the specified CSFetchClauses

  • Fetches the number of NSManagedObjects that satisfy the specified CSFetchClauses. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Declaration

    Swift

    @objc
    public func fetchCountFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSNumber?

    Parameters

    from

    a CSFrom clause indicating the entity type

    fetchClauses

    a series of CSFetchClause instances for the fetch request. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Return Value

    the number NSManagedObjects that satisfy the specified CSFetchClauses

  • Fetches the NSManagedObjectID for the first NSManagedObject that satisfies the specified CSFetchClauses. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Declaration

    Swift

    @objc
    public func fetchObjectIDFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSManagedObjectID?

    Parameters

    from

    a CSFrom clause indicating the entity type

    fetchClauses

    a series of CSFetchClause instances for the fetch request. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Return Value

    the NSManagedObjectID for the first NSManagedObject that satisfies the specified CSFetchClauses

  • Fetches the NSManagedObjectID for all NSManagedObjects that satisfy the specified CSFetchClauses. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Declaration

    Swift

    @objc
    public func fetchObjectIDsFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> [NSManagedObjectID]?

    Parameters

    from

    a CSFrom clause indicating the entity type

    fetchClauses

    a series of FetchClause instances for the fetch request. Accepts CSWhere, CSOrderBy, and CSTweak clauses.

    Return Value

    the NSManagedObjectID for all NSManagedObjects that satisfy the specified CSFetchClauses

  • Queries aggregate values as specified by the CSQueryClauses. Requires at least a CSSelect clause, and optional CSWhere, CSOrderBy, CSGroupBy, and CSTweak clauses.

    A query differs from a fetch 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.

    Declaration

    Swift

    @objc
    public func queryValueFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> Any?

    Parameters

    from

    a CSFrom clause indicating the entity type

    selectClause

    a CSSelect clause indicating the properties to fetch, and with the generic type indicating the return type.

    queryClauses

    a series of CSQueryClause instances for the query request. Accepts CSWhere, CSOrderBy, CSGroupBy, and CSTweak clauses.

    Return Value

    the result of the the query. The type of the return value is specified by the generic type of the CSSelect parameter.

  • Queries a dictionary of attribute values as specified by the CSQueryClauses. Requires at least a CSSelect clause, and optional CSWhere, CSOrderBy, CSGroupBy, and CSTweak clauses.

    A query differs from a fetch 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.

    Declaration

    Swift

    @objc
    public func queryAttributesFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> [[String : Any]]?

    Parameters

    from

    a CSFrom clause indicating the entity type

    selectClause

    a CSSelect clause indicating the properties to fetch, and with the generic type indicating the return type.

    queryClauses

    a series of CSQueryClause instances for the query request. Accepts CSWhere, CSOrderBy, CSGroupBy, and CSTweak clauses.

    Return Value

    the result of the the query. The type of the return value is specified by the generic type of the CSSelect parameter.

  • Begins a transaction asynchronously where NSManagedObject creates, updates, and deletes can be made.

    Declaration

    Swift

    @objc
    public func beginAsynchronous(_ closure: @escaping (_ transaction: CSAsynchronousDataTransaction) -> Void)

    Parameters

    closure

    the block 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.

  • Begins a transaction synchronously where NSManagedObject creates, updates, and deletes can be made.

    Declaration

    Swift

    @objc
    public func beginSynchronous(_ closure: @escaping (_ transaction: CSSynchronousDataTransaction) -> Void, error: NSErrorPointer) -> Bool

    Parameters

    closure

    the block 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.

    error

    the CSError pointer that indicates the reason in case of an failure

    Return Value

    YES if the commit succeeded, NO if the commit failed. If NO, the error argument will hold error information.

  • 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.

    To support undo methods such as -undo, -redo, and -rollback, use the -beginSafeWithSupportsUndo: method passing YES to the argument. Without undo support, calling those methods will raise an exception.

    Declaration

    Swift

    @objc
    public func beginUnsafe() -> CSUnsafeDataTransaction

    Return Value

    a CSUnsafeDataTransaction instance where creates, updates, and deletes can be made.

  • 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.

    • prameter supportsUndo: -undo, -redo, and -rollback methods are only available when this parameter is YES, otherwise those method will raise an exception. Note that turning on Undo support may heavily impact performance especially on iOS or watchOS where memory is limited.

    Declaration

    Swift

    @objc
    public func beginUnsafeWithSupportsUndo(_ supportsUndo: Bool) -> CSUnsafeDataTransaction

    Return Value

    a CSUnsafeDataTransaction instance where creates, updates, and deletes can be made.

  • Refreshes all registered objects NSManagedObjects in the DataStack.

    Declaration

    Swift

    @objc
    public func refreshAndMergeAllObjects()