Skip to content

Instantly share code, notes, and snippets.

@mikeabdullah
Created November 26, 2012 12:06
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 mikeabdullah/4147871 to your computer and use it in GitHub Desktop.
Save mikeabdullah/4147871 to your computer and use it in GitHub Desktop.
Recovering from "Dangling reference to an invalid object." error
- (BOOL)attemptRecoveryFromPossibleCascadeDeleteRuleFailureError:(NSError *)error;
{
// Make sure it's an unknown validation error for a managed object
if ([error code] != NSManagedObjectValidationError) return NO;
if (![[error domain] isEqualToString:NSCocoaErrorDomain]) return NO;
NSManagedObject *object = [[error userInfo] objectForKey:NSValidationObjectErrorKey];
if (![object isKindOfClass:[NSManagedObject class]]) return NO;
NSString *key = [[error userInfo] objectForKey:NSValidationKeyErrorKey];
if (!key) return NO;
// Make sure it's a relationship to another MO
NSRelationshipDescription *relationship = [[[object entity] relationshipsByName] objectForKey:key];
if (!relationship) return NO;
// Has the target MO been deleted?
NSManagedObject *invalidValue = [object valueForKey:key];
if (![invalidValue isDeleted] && [invalidValue managedObjectContext]) return NO;
// Should deleting that have caused the problematic object to have been deleted too?
if ([[relationship inverseRelationship] deleteRule] != NSCascadeDeleteRule) return NO;
// OK, we're pretty sure the cascade delete rule wasn't honoured, so do it ourselves
NSLog(@"Deleting object that looks like Cascade delete rule for key %@ wasn't honoured: %@", key, object);
[[object managedObjectContext] deleteObject:object];
return YES;
}
@v2Nitesh
Copy link

v2Nitesh commented Nov 1, 2017

@mikeabdullah : Where we have to use this method or what is the best place to write this code?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment