Dear cocoa-dev,
Running on iPad simulator 6.1, I have a hazardous bug when using core data. The
bug occurs 1 time over 5 approximately when I try to fetch data. The problem
comes from my configuration of the core data stack with nested contexts.
Indeed, when I remove the parent context and work directly with only one
context (with NSMainQueueConcurrencyType type), I don't have bugs anymore.
Here is the code for the buggy configuration.
If you have any advice (including links), thank you !
- (void)initTheCoreDataStack
{
NSManagedObjectModel * model = [NSManagedObjectModel
mergedModelFromBundles:nil] ;
NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinator
alloc] initWithManagedObjectModel:model] ;
NSDictionary *optionsForMigration = @{
NSMigratePersistentStoresAutomaticallyOption: @(YES),
NSInferMappingModelAutomaticallyOption : @(YES),
NSSQLitePragmasOption:
@{@"journal_mode":@"DELETE"}
} ;
/*
Static data
*/
NSURL * URLStaticData = [[NSBundle mainBundle]
URLForResource:kNameStaticDataFile
withExtension:kNameDataExtension] ;
NSMutableDictionary *options = [optionsForMigration mutableCopy] ;
//FIXME : problem -> migrating + read-only seems to not work
//[options addEntriesFromDictionary:@{NSReadOnlyPersistentStoreOption :
@(YES)}] ;
NSError * error ;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"ConfigurationForMyApp"
URL:URLStaticData
options:options
error:&error] ;
/*
Dynamic data
*/
NSString * nameDynamicFile = [NSString stringWithFormat:@"%@.%@",
kNameDynamicDataFile, kNameDataExtension] ;
NSURL * URLDynamicData = [[[self class] documentsFolderURL]
URLByAppendingPathComponent:nameDynamicFile] ;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"ConfigurationForAppData"
URL:URLDynamicData
options:optionsForMigration
error:&error] ;
/*
Creation of the MOC
*/
NSManagedObjectContext * theParentPrivateMOC =
[[NSManagedObjectContext alloc]
initWithConcurrencyType:NSPrivateQueueConcurrencyType] ;
[theParentPrivateMOC performBlock:^{
theParentPrivateMOC.persistentStoreCoordinator = coordinator ;
}] ;
NSManagedObjectContext * theMainMOC = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType] ;
theMainMOC.parentContext = theParentPrivateMOC ;
/*
Instanciation of the MOC
*/
_managedObjectContext = theMainMOC ;
}
Thanks !
Colas
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]