When compiling and running in the XCode a project using Core Data
I\'m getting an error I never saw before:
2013-09-12 16:59:10.156 myapp[57811
Now that the NDA on iOS7 has been lifted I can post for the sake of completion the workaround I found for this problem.
The Core Data in iOS7 uses by default WAL
in the sqlite
.
The only solution that did work was to create the sqlite using iOS6 simulator without WAL
and import it in the project:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
static NSPersistentStoreCoordinator *psc;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
psc = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:self.managedObjectModel];
NSURL *storeURL = [[NSBundle mainBundle]
URLForResource:@"database" withExtension:@"sqlite"];
[psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:@{NSReadOnlyPersistentStoreOption : @YES,
NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}}
error:NULL];
});
return psc;
}
NSURL *storeURL = [[NSBundle mainBundle]
URLForResource:@"database" withExtension:@"sqlite"];
builds a path inside the application bundle, which is read-only. The persistent store file needs to reside in a writable directory, e.g. the "Documents" directory.
EDIT: The above answer is actually wrong, it is possible to open a read-only Core Data file from the application bundle (using NSReadOnlyPersistentStoreOption
). The only thing I can currently imagine is that the
bundled file is not a valid Core Data database. Adding the launch argument
-com.apple.CoreData.SQLDebug 1
might help to localize the problem.