NSMergeByPropertyObjectTrumpMergePolicy vs. NSMergeByPropertyStoreTrumpMergePolicy
cocoa-touch, core-data, ios, objective-c
Solution
I ended up going with this solution (well over a year ago), but as I received no answer to this question recently, I decided to put my own.
NSManagedObjectContext *context;
if ( [NSThread isMainThread] ) {
context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
} else {
context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
}
Problem
In my multithreaded app, the main thread and one or more background threads may simultaneously access, fetch, and change information in my core data store. For each thread, I am creating a new `NSManagedObjectContext`. However, each instance of `NSManagedObjectContext` uses the same `NSPersistentStoreCoordinator' instance (stored elsewhere in a singleton). My question is in regards to the merge policies of each instance of `NSManagedObjectContext`. Is there an intrinsic benefit if I set one merge policy for background threads (`NSMergeByPropertyStoreTrumpMergePolicy`) and another policy (`NSMergeByPropertyObjectTrumpMergePolicy`) for the main thread? In my `NSMangagedObjectContext` getter, I have the following conditional: ``` if ( [NSThread isMainThread] ) { [_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; } else { [_context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy]; } ``` Thank you. Edit: Is it necessary? Should I just default to one policy over the other for both types of threads?