CRLoom is a framework for helping with the import, update and querying of NSManagedObject
s
This is an NSOperation
subclass that created via
+ (instanceType)operationWithData:(id)data
managedObjectClass:(Class)class
guaranteedInsert:(BOOL)guaranteedInsert
saveOnBatchSize:(NSUInteger)batchSize
pruneMissingObjects:(BOOL)pruneMissingObjects
useCache:(BOOL)useCache
error:(NSError* __autoreleasing *)error;
This operation can be added to an NSOperationQueue
and will thread the work of importing the data. Setting useCache
to YES
will have the operation provide an NSCache
to the thread doing the import work that will be used as a first layer to check to find existing objects before entire fetch requests are used.
This is a category that provides a generic implementation for importing and finding NSManagedObject
s. The import and search methods take an NSManagedObjectContext
as a parameter so they can work on different threads.
+ (NSArray*)importData:(id)data
intoContext:(NSManagedObjectContext*)moc
withCache:(NSCache*)cache
guaranteedInsert:(BOOL)guaranteedInsert
saveOnBatchSize:(NSUInteger)batchSize
error:(NSError* __autoreleasing *)error;
A cache can be provided to be used as a first check place for existing objects when processing this data into NSManagedObject
s. Providing a cache here will ensure that those shared objects when created or retrieved for the first time will be held in a cache to reduce the total amount of fetch requests made.
+ (instancetype)existingObjectWithIdentifierValue:(id)value
inContext:(NSManagedObjectContext*)moc
withCache:(NSCache*)cache
error:(NSError* __autoreleasing *)error;
For these methods to work for a given NSManagedObject
subclass must implement a few methods. The methods that need to be implemented provided by the <CRLoomImport>
protocol.
A method that returns the model (Core Data) key that represents the object's unique identifier
+ (NSString*)uniqueModelIdentifierKey;
A method that returns the key that represents the object's unique identifier in the data being imported (e.g. key in JSON from your API)
+ (NSString*)uniqueDataIdentifierKey;
A method to update the object with data from the api. This allows work to be done on any given context should ensure error delivery, the cache will be used as a first layer for getting existing relationship objects before a full fetch request to core data is done.
- (BOOL)updateWithData:(NSDictionary*)data
intoContext:(NSManagedObjectContext*)moc
withCache:(NSCache*)cache
error:(NSError**)error;
A method to indicate whether a model's data is identical to an NSDictionary
representation of that object.
- (BOOL)isIdenticalToData:(NSDictionary*)data;
An NSManagedObject
subclass can also optionally implement methods to return the NSPredicate
that should be used to "match" objects.
+ (NSPredicate*)predicateWithIdentiferValue:(id)identifierValue;
+ (NSPredicate*)predicateWithIdentiferCollection:(NSArray*)identifierCollection;