我正在尝试关闭CoreData存储中的日记模式。这是我的代码,它只是创建一个新旧的CoreData存储(与日志模式一样)而不迁移数据。这里有什么问题?
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSString *applicationDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *urlString = [applicationDocumentsDirectory stringByAppendingPathComponent: @"saori.sqlite"];
NSURL *url = [NSURL fileURLWithPath:urlString];
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
NSDictionary *dict = @{@"journal_mode":@"OFF"};
NSDictionary *opts = @{NSSQLitePragmasOption:dict};
NSError *theError;
if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:opts error: &theError ]) {
NSLog(@"\n\nDisable journaling failed with error: %@", theError);
}
答案 0 :(得分:1)
根据sqlite.org上的文档:
DELETE日记记录模式是正常行为。在DELETE模式下,在每个事务结束时删除回滚日志。实际上,删除操作是导致事务提交的操作。
因此,日记文件将被删除,但它不会“关闭”日记功能,因此会立即重新创建它们。但是,您可以将日记设置为“关闭”:
OFF日记模式完全禁用回滚日志。永远不会创建回滚日志,因此永远不会有要删除的回滚日志。 OFF日记模式禁用SQLite的原子提交和回滚功能。