From 8ae952ec8df2a713afeaef5960a88888e050c6fc Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sun, 15 Oct 2017 23:47:11 +0300 Subject: WIP --- Juick/CoreDataStack.h | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Juick/CoreDataStack.h (limited to 'Juick/CoreDataStack.h') 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 -- cgit v1.2.3