Skip to content

Instantly share code, notes, and snippets.

@kolyuchiy
Created March 28, 2014 07:28
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 kolyuchiy/9827218 to your computer and use it in GitHub Desktop.
Save kolyuchiy/9827218 to your computer and use it in GitHub Desktop.
Core Data Transaction-like Method
- (BOOL)performBlockAndSaveOrReset:(BOOL (^)(NSError *__autoreleasing *))block error:(NSError *__autoreleasing *)error
{
__block BOOL blockOk, saveOk;
__block NSError *blockError, saveError;
[self performBlockAndWait:^{
blockOk = block(&blockError);
if (! blockOk) {
[self reset]; return;
}
if (! [self hasChanges]) {
saveOk = YES; return;
}
saveOk = [self save:&saveError];
if (! saveOk) {
[self reset]; return;
}
}];
if (error) {
*error = blockError ?: saveError;
}
return blockOk && saveOk;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment