NSPersistentStoreCoordinator Class Reference
| Inherits from | |
| Conforms to | |
| Framework | /System/Library/Frameworks/CoreData.framework |
| Availability | Available in iOS 3.0 and later. |
| Declared in | NSPersistentStoreCoordinator.h |
| Companion guides | |
Overview
Instances of NSPersistentStoreCoordinator associate persistent stores (by type) with a model (or more accurately, a configuration of a model) and serve to mediate between the persistent store or stores and the managed object context or contexts. Instances of NSManagedObjectContext use a coordinator to save object graphs to persistent storage and to retrieve model information. A context without a coordinator is not fully functional as it cannot access a model except through a coordinator. The coordinator is designed to present a façade to the managed object contexts such that a group of persistent stores appears as an aggregate store. A managed object context can then create an object graph based on the union of all the data stores the coordinator covers.
Coordinators do the opposite of providing for concurrency—they serialize operations. If you want to use multiple threads for different write operations you use multiple coordinators. Note that if multiple threads work directly with a coordinator, they need to lock and unlock it explicitly.
Each coordinator (and thus container) may use different copies, and hence different versions, of a managed object model. This allows you to cleanly deal with file versioning.
The coordinator gives access to its underlying object stores. You can retrieve an object store when you first add one (using addPersistentStoreWithType:configuration:URL:options:error:), or by using persistentStoreForURL: or persistentStores. This allows you to to determine, for example, whether a store has already been added, or whether two objects come from the same store.
You move a store from one location to another, or change the type of a store, using migratePersistentStore:toURL:options:withType:error:.
You can set metadata for a given store using the persistent store coordinator (
setMetadata:forPersistentStore:).
For more details about these tasks, see “Persistent Store Features” in Core Data Programming Guide.
Tasks
Registered Store Types
Initializing a Coordinator
Configuring Persistent Stores
-
– addPersistentStoreWithType:configuration:URL:options:error: -
– setURL:forPersistentStore: -
– removePersistentStore:error: -
– migratePersistentStore:toURL:options:withType:error: -
– persistentStores -
– persistentStoreForURL: -
– URLForPersistentStore:
Executing a Fetch Request
Locking
Working with Metadata
-
– metadataForPersistentStore: -
– setMetadata:forPersistentStore: -
+ setMetadata:forPersistentStoreOfType:URL:error: -
+ metadataForPersistentStoreOfType:URL:error:
Discovering Object IDs
Class Methods
metadataForPersistentStoreOfType:URL:error:
Returns a dictionary containing the metadata stored in the persistent store at a given URL.
Parameters
- storeType
The type of the store at url. If this value is
nil, Core Data determines which store class should be used to get or set the store file's metadata by inspecting the file contents.- url
The location of a persistent store.
- error
If no store is found at url or if there is a problem accessing its contents, upon return contains an
NSErrorobject that describes the problem.
Return Value
A dictionary containing the metadata stored in the persistent store at url, or nil if the store cannot be opened or if there is a problem accessing its contents.
The keys guaranteed to be in this dictionary are NSStoreTypeKey and NSStoreUUIDKey.
Discussion
You can use this method to retrieve the metadata from a store without the overhead of creating a Core Data stack.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hregisteredStoreTypes
Returns a dictionary of the registered store types.
Return Value
A dictionary of the registered store types—the keys are the store type strings, and the values are the NSPersistentStore subclasses.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hregisterStoreClass:forStoreType:
Registers a given NSPersistentStore subclass for a given store type string.
Parameters
- storeClass
The
NSPersistentStoresubclass to use for the store of type storeType.- storeType
A unique string that identifies a store type.
Discussion
You must invoke this method before a custom subclass of NSPersistentStore can be loaded into a persistent store coordinator.
You can pass nil for storeClass to unregister the store type.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hsetMetadata:forPersistentStoreOfType:URL:error:
Sets the metadata for a given store.
Parameters
- metadata
A dictionary containing metadata for the store.
- storeType
The type of the store at url. If this value is
nil, Core Data will determine which store class should be used to get or set the store file's metadata by inspecting the file contents.- url
The location of a persistent store.
- error
If no store is found at url or if there is a problem setting its metadata, upon return contains an
NSErrorobject that describes the problem.
Return Value
YES if the metadata was set correctly, otherwise NO.
Discussion
You can use this method to set the metadata for a store without the overhead of creating a Core Data stack.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hInstance Methods
addPersistentStoreWithType:configuration:URL:options:error:
Adds a new persistent store of a specified type at a given location, and returns the new store.
Parameters
- storeType
A string constant (such as
NSSQLiteStoreType) that specifies the store type—see “Store Types” for possible values.- configuration
The name of a configuration in the receiver's managed object model that will be used by the new store. The configuration can be
nil, in which case no other configurations are allowed.- storeURL
The file location of the persistent store.
- options
A dictionary containing key-value pairs that specify whether the store should be read-only, and whether (for an XML store) the XML file should be validated against the DTD before it is read. For key definitions, see
“Store Options”and“Migration Options”. This value may benil.- error
If a new store cannot be created, upon return contains an instance of
NSErrorthat describes the problem
Return Value
The newly-created store or, if an error occurs, nil.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hexecuteRequest:withContext:error:
Sends a request to all the persistent stores associated with the receiver.
Parameters
- request
A fetch or save request.
- context
The context against which request should be executed.
- error
If an error occurs, upon return contains an NSError object that describes the problem.
Return Value
An array containing managed objects, managed object IDs, or dictionaries as appropriate for a fetch request; an empty array if request is a save request, or nil if an error occurred.
User defined requests return arrays of arrays, where a nested array is the result returned from a single store.
Availability
- Available in iOS 5.0 and later.
Declared In
NSPersistentStoreCoordinator.hinitWithManagedObjectModel:
Initializes the receiver with a managed object model.
Parameters
- model
A managed object model.
Return Value
The receiver, initialized with model.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hlock
Attempts to acquire a lock.
Discussion
This method blocks a thread’s execution until the lock can be acquired. An application protects a critical section of code by requiring a thread to acquire a lock before executing the code. Once the critical section is past, the thread relinquishes the lock by invoking unlock.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hmanagedObjectIDForURIRepresentation:
Returns an object ID for the specified URI representation of an object ID if a matching store is available, or nil if a matching store cannot be found.
Parameters
- URL
An URL object containing a URI that specify a managed object.
Return Value
An object ID for the object specified by URL.
Discussion
The URI representation contains a UUID of the store the ID is coming from, and the coordinator can match it against the stores added to it.
Availability
- Available in iOS 3.0 and later.
See Also
-
URIRepresentation(NSManagedObjectID) -
objectWithID:(NSManagedObjectContext)
Declared In
NSPersistentStoreCoordinator.hmanagedObjectModel
Returns the receiver’s managed object model.
Return Value
The receiver’s managed object model.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hmetadataForPersistentStore:
Returns a dictionary that contains the metadata currently stored or to-be-stored in a given persistent store.
Parameters
- store
A persistent store.
Return Value
A dictionary that contains the metadata currently stored or to-be-stored in store.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hmigratePersistentStore:toURL:options:withType:error:
Moves a persistent store to a new location, changing the storage type if necessary.
Parameters
- store
A persistent store.
- URL
An URL object that specifies the location for the new store.
- options
A dictionary containing key-value pairs that specify whether the store should be read-only, and whether (for an XML store) the XML file should be validated against the DTD before it is read. For key definitions, see “Store Options.”
- storeType
A string constant (such as
NSSQLiteStoreType) that specifies the type of the new store—see “Store Types.”- error
If an error occurs, upon return contains an instance of
NSErrorthat describes the problem.
Return Value
If the migration is successful, the new store, otherwise nil.
Discussion
This method is typically used for “Save As” operations. Performance may vary depending on the type of old and new store. For more details of the action of this method, see “Persistent Store Features” in Core Data Programming Guide.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hpersistentStoreForURL:
Returns the persistent store for the specified URL.
Parameters
- URL
An URL object that specifies the location of a persistent store.
Return Value
The persistent store at the location specified by URL.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hpersistentStores
Returns an array of persistent stores associated with the receiver.
Return Value
An array persistent stores associated with the receiver.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hremovePersistentStore:error:
Removes a given persistent store.
Parameters
- store
A persistent store.
- error
If an error occurs, upon return contains an instance of
NSErrorthat describes the problem.
Return Value
YES if the store is removed, otherwise NO.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hsetMetadata:forPersistentStore:
Sets the metadata stored in the persistent store during the next save operation executed on it to metadata.
Parameters
- metadata
A dictionary containing metadata for the store.
- store
A persistent store.
Discussion
The store type and UUID (NSStoreTypeKey and NSStoreUUIDKey) are always added automatically, however NSStoreUUIDKey is only added if it is not set manually as part of the dictionary argument.
Availability
- Available in iOS 3.0 and later.
See Also
Declared In
NSPersistentStoreCoordinator.hsetURL:forPersistentStore:
Sets the URL for a given persistent store.
Parameters
- url
The new location for store.
- store
A persistent store associated with the receiver.
Return Value
YES if the store was relocated, otherwise NO.
Discussion
For atomic stores, this method alters the location to which the next save operation will write the file; for non-atomic stores, invoking this method will relinquish the existing connection and create a new one at the specified URL. (For non-atomic stores, a store must already exist at the destination URL; a new store will not be created.)
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.htryLock
Attempts to acquire a lock.
Return Value
YES if successful, otherwise NO.
Discussion
Returns immediately—contrast lock which blocks.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hunlock
Relinquishes a previously acquired lock.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hURLForPersistentStore:
Returns the URL for a given persistent store.
Parameters
- store
A persistent store.
Return Value
The URL for store.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hConstants
Store Types
Types of persistent store.
NSString * const NSSQLiteStoreType; NSString * const NSBinaryStoreType; NSString * const NSInMemoryStoreType;
Constants
NSSQLiteStoreTypeThe SQLite database store type.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSBinaryStoreTypeThe binary store type.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSInMemoryStoreTypeThe in-memory store type.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Store Metadata
Keys used in a store’s metadata dictionary.
NSString * const NSStoreTypeKey; NSString * const NSStoreUUIDKey;
Constants
NSStoreTypeKeyThe key in the metadata dictionary to identify the store type.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSStoreUUIDKeyThe key in the metadata dictionary to identify the store UUID.
The store UUID is useful to identify stores through URI representations, but it is not guaranteed to be unique. The UUID generated for new stores is unique—users can freely copy files and thus the UUID stored inside—so if you track or reference stores explicitly you need to be aware of duplicate UUIDs and potentially override the UUID when a new store is added to the list of known stores in your application.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Stores Change Notification User Info Keys
An NSPersistentStoreCoordinatorStoresDidChangeNotification notification is posted whenever persistent stores are added to or removed from a persistent store coordinator, or when store UUIDs change. The userInfo dictionary contains information about the stores that were added or removed using these keys.
NSString * const NSAddedPersistentStoresKey; NSString * const NSRemovedPersistentStoresKey; NSString * const NSUUIDChangedPersistentStoresKey;
Constants
NSAddedPersistentStoresKeyKey for the array of stores that were added.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSRemovedPersistentStoresKeyKey for the array of stores that were removed.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSUUIDChangedPersistentStoresKeyKey for the array of stores whose UUIDs changed.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Store Options
Keys for the options dictionary used in addPersistentStoreWithType:configuration:URL:options:error:, migratePersistentStore:toURL:options:withType:error:, and importStoreWithIdentifier:fromExternalRecordsDirectory:toURL:options:withType:error:.
NSString * const NSReadOnlyPersistentStoreOption; NSString * const NSPersistentStoreTimeoutOption; NSString * const NSSQLitePragmasOption; NSString * const NSSQLiteAnalyzeOption; NSString * const NSSQLiteManualVacuumOption; NSString * const NSPersistentStoreUbiquitousContentNameKey; NSString * const NSPersistentStoreUbiquitousContentURLKey; NSString * const NSPersistentStoreFileProtectionKey;
Constants
NSReadOnlyPersistentStoreOptionA flag that indicates whether a store is treated as read-only or not.
The default value is
NO.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSPersistentStoreTimeoutOptionOptions key that specifies the connection timeout for Core Data stores.
The corresponding value is an
NSNumberobject that represents the duration in seconds that Core Data will wait while attempting to create a connection to a persistent store. If a connection is cannot be made within that timeframe, the operation is aborted and an error is returned.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSSQLitePragmasOptionOptions key for a dictionary of SQLite pragma settings with pragma values indexed by pragma names as keys.
All pragma values must be specified as
NSStringobjects. Thefullfsyncandsynchronouspragmas control the tradeoff between write performance (write to disk speed & cache utilization) and durability (data loss/corruption sensitivity to power interruption). For more information on pragma settings, see http://sqlite.org/pragma.html.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSSQLiteAnalyzeOptionOption key to run an analysis of the store data to optimize indices based on statistical information when the store is added to the coordinator.
This invokes SQLite's
ANALYZEcommand. It is ignored by stores other than the SQLite store.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSSQLiteManualVacuumOptionOption key to rebuild the store file, forcing a database wide defragmentation when the store is added to the coordinator.
This invokes SQLite's
VACUUMcommand. It is ignored by stores other than the SQLite store.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSPersistentStoreUbiquitousContentNameKeyOption to specify that a persistent store has a given name in ubiquity.
This option is required for ubiquitous content to function.
Available in iOS 5.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSPersistentStoreUbiquitousContentURLKeyOption to specify the log path to use for ubiquitous content logs.
This option is required for ubiquitous content to function.
Available in iOS 5.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSPersistentStoreFileProtectionKeyKey to represent the protection class for the persistent store.
Backward compatibility may preclude some features. The acceptable values are those defined for the
NSFileProtectionKey. The default value isNSFileProtectionCompleteUntilFirstUserAuthenticationfor all applications built on or after iOS v5.0. The default value for all older applications isNSFileProtectionNone.Available in iOS 5.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Migration Options
Migration options, specified in the dictionary of options when adding a persistent store using addPersistentStoreWithType:configuration:URL:options:error:.
NSString * const NSIgnorePersistentStoreVersioningOption; NSString * const NSMigratePersistentStoresAutomaticallyOption; NSString * const NSInferMappingModelAutomaticallyOption;
Constants
NSIgnorePersistentStoreVersioningOptionKey to ignore the built-in versioning provided by Core Data.
The corresponding value is an
NSNumberobject. If theboolValueof the number isYES, Core Data will not compare the version hashes between the managed object model in the coordinator and the metadata for the loaded store. (It will, however, continue to update the version hash information in the metadata.) This key and corresponding value ofYESis specified by default for all applications linked on or before OS X v10.4.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSMigratePersistentStoresAutomaticallyOptionKey to automatically attempt to migrate versioned stores.
The corresponding value is an
NSNumberobject. If theboolValueof the number isYESand if the version hash information for the added store is determined to be incompatible with the model for the coordinator, Core Data will attempt to locate the source and mapping models in the application bundles, and perform a migration.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSInferMappingModelAutomaticallyOptionKey to attempt to create the mapping model automatically.
The corresponding value is an
NSNumberobject. If theboolValueof the number isYESand the value of theNSMigratePersistentStoresAutomaticallyOptionisYES, the coordinator will attempt to infer a mapping model if none can be found.Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Versioning Support
Keys in store metadata to support versioning.
NSString * const NSStoreModelVersionHashesKey; NSString * const NSStoreModelVersionIdentifiersKey; NSString * const NSPersistentStoreOSCompatibility;
Constants
NSStoreModelVersionHashesKeyKey to represent the version hash information for the model used to create the store.
This key is used in the metadata for a persistent store.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSStoreModelVersionIdentifiersKeyKey to represent the version identifiers for the model used to create the store.
If you add your own annotations to a model’s version identifier (see
versionIdentifiers), they are stored in the persistent store’s metadata. You can use this key to retrieve the identifiers from the metadata dictionaries available fromNSPersistentStore(metadata) andNSPersistentStoreCoordinator(metadataForPersistentStore:and related methods). The corresponding value is a Foundation collection (anNSArrayorNSSetobject).Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.NSPersistentStoreOSCompatibilityKey to represent the earliest version of the operation system that the persistent store supports.
The corresponding value is an
NSNumberobject that takes the form of the constants defined by the availability macros defined in/usr/include/AvailabilityMacros.h; for example1040represents OS X version 10.4.0.Backward compatibility may preclude some features.
Available in iOS 3.0 and later.
Declared in
NSPersistentStoreCoordinator.h.
Notifications
NSPersistentStoreCoordinatorStoresDidChangeNotification
The notification's object is the persistent store coordinator that was affected. The notification’s userInfo dictionary contains information about the stores that were added or removed, specified using the following keys:
NSAddedPersistentStoresKey | Key for the array of stores that were added. |
NSRemovedPersistentStoresKey | Key for the array of stores that were removed. |
NSUUIDChangedPersistentStoresKey | Key for the array of stores whose UUIDs changed. |
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hNSPersistentStoreCoordinatorWillRemoveStoreNotification
The notification is sent during the invocation of NSPersistentStore’s willRemoveFromPersistentStoreCoordinator: method during store deallocation or removal. The notification's object is the persistent store coordinator will be removed.
Availability
- Available in iOS 3.0 and later.
Declared In
NSPersistentStoreCoordinator.hNSPersistentStoreDidImportUbiquitousContentChangesNotification
The notification’s object is set to the NSPersistentStoreCoordinator instance which registered the store.
Availability
- Available in iOS 5.0 and later.
Declared In
NSPersistentStoreCoordinator.h© 2011 Apple Inc. All Rights Reserved. (Last updated: 2011-10-12)