Graceful termination of NSApplication with Core Data and Grand Central Dispatch (GCD)

Posted by Vincent Mac on Stack Overflow See other posts from Stack Overflow or by Vincent Mac
Published on 2012-04-09T23:23:48Z Indexed on 2012/04/09 23:30 UTC
Read the original article Hit count: 421

Filed under:
|
|

I have an Cocoa Application (Mac OS X SDK 10.7) that is performing some processes via Grand Central Dispatch (GCD). These processes are manipulating some Core Data NSManagedObjects (non-document-based) in a manner that I believe is thread safe (creating a new managedObjectContext for use in this thread).

The problem I have is when the user tries to quit the application while the dispatch queue is still running.

The NSApplication delegate is being called before actually quitting.

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender 

I get an error "Could not merge changes." Which is somewhat expected since there are still operations being performed through the different managedObjectContext. I am then presented with the NSAlert from the template that is generated with a core data application.

In the Threading Programming Guide there is a section called "Be Aware of Thread Behaviors at Quit Time" which alludes to using replyToApplicationShouldTerminate: method. I'm having a little trouble implementing this.

What I would like is for my application to complete processing the queued items and then terminate without presenting an error message to the user. It would also be helpful to update the view or use a sheet to let the user know that the app is performing some action and will terminate when the action is complete.

Where and how would I implement this behavior?

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about osx