Skip to content

Instantly share code, notes, and snippets.

@hsavit1
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hsavit1/b81361ba7d423692652c to your computer and use it in GitHub Desktop.
Save hsavit1/b81361ba7d423692652c to your computer and use it in GitHub Desktop.
Category on NSManagedObject
#import "NSManagedObject+MVVM.h"
#import <RBCoreDataStack/NSManagedObject+RBCoreDataStack.h>
@implementation NSManagedObject (MVVM)
+ (RACSignal *)fetchAllSignalInContext:(NSManagedObjectContext *)context {
return [self fetchAllSignalWithPredicate:nil inContext:context];
}
+ (RACSignal *)fetchAllSignalWithPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context {
NSParameterAssert(context);
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSFetchRequest * request = [self fetchRequest];
request.predicate = predicate;
[context performBlock:^{
NSError * error = nil;
NSArray * results = [context executeFetchRequest:request error:&error];
if (results) {
[subscriber sendNext:results];
}
else {
[subscriber sendError:error];
}
[subscriber sendCompleted];
}];
return [RACDisposable disposableWithBlock:^{}];
}];
}
@end
#import "NSManagedObjectContext+MVVM.h"
@implementation NSManagedObjectContext (MVVM)
- (RACSignal *)saveContextSignal {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self performBlock:^{
NSError * error = nil;
BOOL success = [self save:&error];
if (success) {
[subscriber sendNext:self];
}
else {
[subscriber sendError:error];
}
[subscriber sendCompleted];
}];
return [RACDisposable disposableWithBlock:^{}];
}];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment