summaryrefslogtreecommitdiff
path: root/Juick/CoreDataStack.h
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/CoreDataStack.h')
-rw-r--r--Juick/CoreDataStack.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/Juick/CoreDataStack.h b/Juick/CoreDataStack.h
new file mode 100644
index 0000000..b430654
--- /dev/null
+++ b/Juick/CoreDataStack.h
@@ -0,0 +1,189 @@
+//
+// CoreDataStack.h
+// Juick
+//
+// Created by Vitaly Takmazov on 15/10/2017.
+// Copyright © 2017 com.juick. All rights reserved.
+//
+
+@import Foundation;
+@import CoreData;
+
+NS_ASSUME_NONNULL_BEGIN
+
+API_AVAILABLE(macosx(10.12),ios(10.0),tvos(10.0),watchos(3.0))
+@interface CoreDataStack : NSObject
+
+/**
+ The default directory for the persistent stores on the current platform.
+ @return An `NSURL` for the directory containing the persistent store(s). If the
+ persistent store does not exist it will be created by default in this location
+ when loaded.
+ */
++ (NSURL *)defaultDirectoryURL;
+
+///---------------------
+/// @name Properties
+///---------------------
+
+/**
+ A read-only flag indicating if the persistent store is loaded.
+ */
+@property (readonly, assign, getter=isStoreLoaded) BOOL storeLoaded;
+
+/**
+ The managed object context associated with the main queue (read-only). To
+ perform tasks on a private background queue see `performBackgroundTask:` and
+ `newPrivateContext`.
+ The context is configured to be generational and to automatically consume save
+ notifications from other contexts.
+ */
+@property (readonly, strong) NSManagedObjectContext *viewContext;
+
+/**
+ The `URL` of the persistent store for this Core Data Stack. If there are more
+ than one stores this property returns the first store it finds. The store may
+ not yet exist. It will be created at this URL by default when first loaded.
+
+ This is a readonly property to create a persistent store in a different
+ location use `loadStoreAtURL:withCompletionHandler`. To move an existing
+ persistent store use `replacePersistentStoreAtURL:withPersistentStoreFromURL:`.
+ */
+@property (readonly, copy) NSURL *storeURL;
+
+/**
+ A flag that indicates whether this store is read-only. Set this value to YES
+ before loading the persistent store if you want a read-only store (for example
+ if you are loading a store from the application bundle).
+
+ Default is NO.
+ */
+@property (assign, getter=isReadOnly) BOOL readOnly;
+
+/**
+ A flag that indicates whether the store is added asynchronously. Set this
+ value before loading the persistent store.
+
+ Default is YES.
+ */
+@property (assign) BOOL shouldAddStoreAsynchronously;
+
+/**
+ A flag that indicates whether the store should be migrated
+ automatically if the store model version does not match the
+ coordinators model version.
+
+ Set this value before loading the persistent store.
+ Default is YES.
+ */
+@property (assign) BOOL shouldMigrateStoreAutomatically;
+
+/**
+ A flag that indicates whether a mapping model should be inferred
+ when migrating a store.
+ Set this value before loading the persistent store.
+
+ Default is YES.
+ */
+@property (assign) BOOL shouldInferMappingModelAutomatically;
+
+///---------------------
+/// @name Initialization
+///---------------------
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Creates and returns a `CoreDataController` object. This is the designated
+ initializer for the class. It creates the managed object model, persistent
+ store coordinator and main managed object context but does not load the
+ persistent store.
+
+ @param name The name of the `NSManagedObjectModel` and by default the name used
+ for the persistent store
+ @return A `CoreDataController` object initialized with the given name.
+ */
+- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
+
+///---------------------------------
+/// @name Loading a Persistent Store
+///---------------------------------
+
+/**
+ Load the persistent store.
+ @param handler This handler block is executed on the calling thread when the
+ loading of the persistent store has completed.
+
+ To override the default name and location of the persistent store use
+ `loadStoreAtURL:withCompletionHandler:`.
+ */
+- (void)loadStoreWithCompletionHandler:(void(^)(NSError *))handler;
+
+/**
+ Load the persistent store.
+ @param storeURL The URL for the location of the persistent store. It will be created if it does not exist.
+ @param handler This handler block is executed on the calling thread when the
+ loading of the persistent store has completed.
+ */
+- (void)loadStoreAtURL:(NSURL *)storeURL withCompletionHandler:(void(^)(NSError * _Nullable))handler;
+
+///----------------------------------
+/// @name Managing a Persistent Store
+///----------------------------------
+
+/**
+ A flag indicating if the persistent store exists at the specified URL.
+ @param storeURL An `NSURL` object for the location of the peristent store.
+ @return YES if a file exists at the specified URL otherwise NO.
+ @warning This method checks if a file exists at the specified location but
+ does not verify if it is a valid persistent store.
+ */
+- (BOOL)persistentStoreExistsAtURL:(NSURL *)storeURL;
+
+/**
+ Replace a persistent store.
+ @param destinationURL An `NSURL` for the persistent store to be replaced.
+ @param sourceURL An `NSURL` for the source persistent store.
+ @return A flag indicating if the operation was successful.
+ */
+- (BOOL)replacePersistentStoreAtURL:(NSURL *)destinationURL withPersistentStoreFromURL:(NSURL *)sourceURL;
+
+/**
+ Destroy a persistent store.
+ @param storeURL An `NSURL` for the persistent store to be destroyed.
+ @return A flag indicating if the operation was successful.
+ */
+- (BOOL)destroyPersistentStoreAtURL:(NSURL *)storeURL;
+
+///----------------------------------
+/// @name Performing Background tasks
+///----------------------------------
+
+/**
+ Execute a block on a new private queue context.
+ @param block A block to execute on a newly created private context. The context
+ is passed to the block as a paramater.
+ */
+- (void)performBackgroundTask:(void(^)(NSManagedObjectContext *))block;
+
+/**
+ Create and return a new private queue `NSManagedObjectContext`. The new context
+ is set to consume `NSManagedObjectContextSave` broadcasts automatically.
+ @return A new private managed object context.
+ */
+- (NSManagedObjectContext *)newPrivateContext NS_RETURNS_RETAINED;
+
+///------------------------
+/// @name NSManagedObjectID
+///------------------------
+
+/**
+ Return an object ID for the specified URI representation if a matching
+ store is available.
+ @param url An `NSURL` containing a URI of a managed object.
+ @return An `NSManagedObjectID` or `nil`.
+ */
+- (NSManagedObjectID *)managedObjectIDForURIRepresentation:(NSURL *)url;
+
+@end
+NS_ASSUME_NONNULL_END