• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Crashing resetting or releasing an NSManagedObjectContext
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Crashing resetting or releasing an NSManagedObjectContext


  • Subject: Re: Crashing resetting or releasing an NSManagedObjectContext
  • From: Alexander Spohr <email@hidden>
  • Date: Wed, 29 Apr 2009 17:32:20 +0200

Daniel,

You are trying to fetch an object and keep it - but you want to ignore / throw away the NSManagedObjectContext. This will never work. The NSManagedObjectContext keeps the object. Your Pet can not exist without its NSManagedObjectContext.

You should let the caller provide a NSManagedObjectContext and fetch your Pet into that context. Make it the callers responsibility to get a NSManagedObjectContext not yours.
+ (Pet *)petAtURL:(NSURL *)url inContext:(NSManagedObjectContext *)aManagedObjectContext


Or copy the pet into something like an NSDictionary and return that.

	atze



Am 29.04.2009 um 10:59 schrieb Daniel Kennett:

Hi list,

I'm hoping you guys can help me. I'm loading up a Core Data store, copying some data out and attempting to clear it all up. I use this code for my Quicklook plugin, and in parts of my app for previewing documents in a more advanced manner than Quicklook provides.

This is how I set up my ManagedObjectContext:

+(Pet *)petAtURL:(NSURL *)url {

NSManagedObjectModel *managedObjectModel = [KNClarusQuickDocumentParser managedObjectModel];
NSPersistentStoreCoordinator *coordinator = [[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel] autorelease];

[coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url
options:nil
error:&error];

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
// ^ Not Autoreleasing here. It's the responsibility of the caller to release the MOC. Autoreleasing causes crashes.


[moc setPersistentStoreCoordinator:coordinator];
[[moc undoManager] disableUndoRegistration];

NSError *fetchError = nil;
NSArray *fetchResults;
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Pet"
inManagedObjectContext:moc];
[fetchRequest setEntity:entity];
fetchResults = [moc executeFetchRequest:fetchRequest error:&fetchError];

if ((fetchResults != nil) && ([fetchResults count] == 1) && (fetchError == nil))
{

NSManagedObject *pet = [[fetchResults objectAtIndex:0] retain];
return [pet autorelease];
}

return nil;

}



And this is how I get the data out and release it:

Pet *pet = [KNClarusQuickDocumentParser petAtURL:url];

// Copy out some data.

NSManagedObjectContext *context = [pet managedObjectContext];

if (context) {

		[context reset]; // This call results in EXC_BAD_ACCESS
		[context setPersistentStoreCoordinator:nil];
		[context release];

	}

return [dict autorelease];

-------- End code --------

Different combinations of trying to do this right result in crashes at different points. Leaving out [context reset] and just releasing it obviously gives EXC_BAD_ACCESS again. Autoreleasing the MOC in +petAtURL: causes crashes when the autorelease pool pops. The only way I can get it to not crash is to -init the MOC and never release or autorelease it, but that's causing memory leaks!

Is there a good example anywhere of how to set up and tear down a Core Data document correctly?

Thanks,

-- Daniel

_______________________

  email@hidden
  http://www.kennettnet.co.uk

Please include previous messages in any reply you send.



_______________________________________________

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

_______________________________________________

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


  • Follow-Ups:
    • Re: Crashing resetting or releasing an NSManagedObjectContext
      • From: Daniel Kennett <email@hidden>
    • Re: Crashing resetting or releasing an NSManagedObjectContext
      • From: Daniel Kennett <email@hidden>
References: 
 >Crashing resetting or releasing an NSManagedObjectContext (From: Daniel Kennett <email@hidden>)

  • Prev by Date: Re: NSButtonCell visibility binding in NSOutlineView
  • Next by Date: NSTableView: Type selecting in one column but not another
  • Previous by thread: Re: Crashing resetting or releasing an NSManagedObjectContext
  • Next by thread: Re: Crashing resetting or releasing an NSManagedObjectContext
  • Index(es):
    • Date
    • Thread