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.