是否可以配置为Core Data生成的SQLite文件的保护级别?
我需要使用NSFileProtectionComplete
级别。
有什么想法吗?
答案 0 :(得分:3)
查找您执行addPersistentStoreWithType:configuration:URL:options:
NSURL *storeURL = ...;
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:...];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:nil
error:&error])
{
NSLog(@"Add persistent store failed: %@", error);
}
然后添加:
NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionComplete};
if (![[NSFileManager defaultManager] setAttributes:attributes
ofItemAtPath:path
error:&error]) {
NSLog(@"File protection failed: %@", error);
}
请注意,您不能在后台使用数据库,请考虑使用NSFileProtectionCompleteUnlessOpen:
NSFileProtectionComplete
:
该文件以加密格式存储在磁盘上,在设备锁定或启动时无法读取或写入。NSFileProtectionCompleteUnlessOpen
:
该文件以加密格式存储在磁盘上。可以在设备锁定时创建文件,但一旦关闭,在设备解锁之前无法再次打开。如果在解锁时打开文件,即使用户锁定设备,您也可以继续正常访问该文件。创建和打开文件时会有一个小的性能损失,但不是在写入或读取时。当设备解锁时,可以通过将文件保护更改为NSFileProtectionComplete
来缓解此问题。