On Jun 8, 2010, at 1:24 PM, David Brown wrote:

> Have you thought about avoiding the problem altogether?
> 
> Instead of marking the objects and then needed to save them, write out a file 
> somewhere that identifies those objects, outside of core data.
> 
> Then, when your app is starting, check for the presence of the file before 
> anything else happens, and take whatever actions you need to take to resume 
> the processing.

That's certainly a possible workaround. Core Data should be able to handle this 
though. When I relaunch my app, all the changes did propagate properly. 
Everything works in the Distribution build without warnings, errors, etc. It's 
just that objc_exception_throw gets called, and I'm wondering why. Is it a 
symptom of an unrelated problem that I'm not understanding yet, is it a bug in 
Core Data, or should I just not worry about it?

Hank

>>> Am 08.06.2010 um 17:53 schrieb Hank Heijink (Mailinglists):
>>> 
>>>> Dear all,
>>>> 
>>>> I've run into the following problem, and I'm a bit stuck - I wonder if you 
>>>> can shed some light on this. I have an iPhone app that uses Core Data, and 
>>>> the problem occurs when the app terminates. I have an NSOperationQueue 
>>>> with potentially several NSOperations that are cancelled in the 
>>>> applicationWillTerminate: UIApplication delegate method.
>>>> 
>>>> These NSOperations all have their own copy of an NSManagedObjectContext 
>>>> and an NSManagedObject subclass (I pass them the persistent store 
>>>> coordinator and an NSManagedObjectID that is permanent at that point).
>>>> 
>>>> Canceling the NSOperation changes an attribute of the NSManagedObject 
>>>> subclass and I save the NSManagedObjectContext on the background thread 
>>>> after this change is made. This means that the NSManagedObjectContext on 
>>>> the main thread is now in conflict, and since all this happens in 
>>>> applicationWillTerminate:, it won't receive the 
>>>> NSManagedObjectContextDidSaveNotification so it can deal with it.
>>>> 
>>>> My solution to this is to set the merge policy to 
>>>> NSMergeByPropertyStoreTrumpMergePolicy right before saving the main 
>>>> NSManagedObjectContext to give precedence to the already-saved context(s). 
>>>> I haven't been able to find any information about this scenario - the Core 
>>>> Data Programming Guide (in Communicating Changes Between Contexts) seems 
>>>> to suggest my approach (case 3b), although there in-memory changes are 
>>>> preferred over store changes.
>>>> 
>>>> I always have a break point set on objc_exception_throw, and it hits this 
>>>> breakpoint in the call to save. This is the stack backtrace:
>>>> 
>>>> #0  0x986d94e6 in objc_exception_throw ()
>>>> #1  0x01dee37c in -[NSPersistentStoreCoordinator(_NSInternalMethods) 
>>>> executeRequest:withContext:] ()
>>>> #2  0x01e22afe in -[NSManagedObjectContext save:] ()
>>>> #3  0x000036b6 in -[MyAppDelegate applicationWillTerminate:]
>>>> ...<snip>...
>>>> 
>>>> However, if I remove the break point or hit continue, the application 
>>>> quits with an exit code of 0. If I wrap my [NSManagedObjectContext save] 
>>>> call in a @try @catch block, the @catch statements are never executed. So, 
>>>> is there an exception or isn't there? Should I rethink my approach? I'm 
>>>> just not sure what the issue is here.
>>>> 
>>>> Any information is greatly appreciated!
>>>> 
>>>> Thanks in advance,
>>>> Hank_______________________________________________
>>>> 
>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>>> 
>>>> 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:
>>>> http://lists.apple.com/mailman/options/cocoa-dev/atze%40freeport.de
>>>> 
>>>> This email sent to a...@freeport.de
>>> 
>>> 
>> 
>> _______________________________________________
>> 
>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>> 
>> 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:
>> http://lists.apple.com/mailman/options/cocoa-dev/ddb%40bithead.net
>> 
>> This email sent to d...@bithead.net
> 
> 

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to