删除CoreData日记记录模式会创建具有日记记录模式的新存储

时间:2014-07-15 20:04:53

标签: objective-c core-data ios7

我正在尝试关闭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);
}

1 个答案:

答案 0 :(得分:1)

根据sqlite.org上的文档:

  

DELETE日记记录模式是正常行为。在DELETE模式下,在每个事务结束时删除回滚日志。实际上,删除操作是导致事务提交的操作。

因此,日记文件将被删除,但它不会“关闭”日记功能,因此会立即重新创建它们。但是,您可以将日记设置为“关闭”:

  

OFF日记模式完全禁用回滚日志。永远不会创建回滚日志,因此永远不会有要删除的回滚日志。 OFF日记模式禁用SQLite的原子提交和回滚功能。