Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

94 lines (73 sloc) 3.254 kb
//
// MagicalRecord+Actions.m
//
// Created by Saul Mora on 2/24/11.
// Copyright 2011 Magical Panda Software. All rights reserved.
//
#import "CoreData+MagicalRecord.h"
#import "NSManagedObjectContext+MagicalRecord.h"
static dispatch_queue_t background_action_queue;
dispatch_queue_t action_queue(void);
dispatch_queue_t action_queue(void)
{
if (background_action_queue == NULL)
{
background_action_queue = dispatch_queue_create("com.magicalpanda.magicalrecord.actionQueue", DISPATCH_QUEUE_SERIAL);
}
return background_action_queue;
}
void reset_action_queue(void);
void reset_action_queue(void)
{
if (background_action_queue != NULL)
{
MRDispatchQueueRelease(background_action_queue);
background_action_queue = NULL;
}
}
@implementation MagicalRecord (Actions)
+ (void) saveInBackgroundUsingContext:(NSManagedObjectContext *)localContext block:(void (^)(NSManagedObjectContext *))block completion:(void(^)(void))completion errorHandler:(void(^)(NSError *))errorHandler;
{
dispatch_async(action_queue(), ^{
block(localContext);
[localContext MR_saveNestedContextsErrorHandler:errorHandler completion:completion];
});
}
+ (void) saveInBackgroundWithBlock:(void (^)(NSManagedObjectContext *))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *))errorHandler;
{
NSManagedObjectContext *mainContext = [NSManagedObjectContext MR_defaultContext];
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext];
[self saveInBackgroundUsingContext:localContext block:block completion:completion errorHandler:errorHandler];
}
+ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *))errorHandler;
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[self saveInBackgroundUsingContext:localContext block:block completion:completion errorHandler:errorHandler];
}
+ (void) saveWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *))errorHandler;
{
NSManagedObjectContext *mainContext = [NSManagedObjectContext MR_defaultContext];
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext];
block(localContext);
if ([localContext hasChanges])
{
[localContext MR_saveErrorHandler:errorHandler];
}
if (completion)
{
dispatch_async(dispatch_get_main_queue(), completion);
}
}
+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block
{
[self saveWithBlock:block completion:nil errorHandler:nil];
}
+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block
{
[self saveInBackgroundWithBlock:block completion:nil errorHandler:nil];
}
+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))callback
{
[self saveInBackgroundWithBlock:block completion:callback errorHandler:nil];
}
@end
Jump to Line
Something went wrong with that request. Please try again.