Re: Core Data: Determine if managed object is deleted
Re: Core Data: Determine if managed object is deleted
- Subject: Re: Core Data: Determine if managed object is deleted
- From: Jerry Krinock <email@hidden>
- Date: Fri, 21 Oct 2011 21:35:30 -0700
On 2011 Oct 21, at 08:57, David Riggle wrote:
> - (BOOL)retainedObjectHasBeenDeleted
> {
> // if object has been deleted, then it no longer exists
> if ([self isDeleted]) return YES;
> // otherwise, see if object with this ID exists in the database
> NSManagedObjectContext *context = [self managedObjectContext];
> if (context == nil) return YES;
> NSManagedObjectID *objectID = [self objectID];
> if (objectID == nil) return YES;
> NSManagedObject *obj = [context objectRegisteredForID:objectID];
> return obj == nil;
> }
Interesting, David.
Why do you check for the object ID? Have you ever seen an object which passed the first two tests (not isDeleted, has MOC), but then didn't have an objectID? How could that happen?
> I'm currently experimenting with the following to see if it's as safe and perhaps faster…
Are you having performance issues with your original -retainedObjectHasBeenDeleted?
In my world, -retainedObjectHasBeenDeleted is only going to be invoked in corner cases, but documentation states that -prepareForDeletion is invoked "when the receiver is about to be deleted". That may be quite often in some use cases. Also, there is another definition trap there – what does "when the receiver is about to be deleted" mean? How will that be interpreted by an Apple engineer who adds some new object-deleting method to support iCloud 2.0 in Mac OS 10.8? Plus, what Dave Fernandes noted.
I think that your original -retainedObjectHasBeenDeleted is fine and I wouldn't mess with it if I were you.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden