3

是否可以配置为 Core Data 生成的 SQLite 文件的保护级别?

我需要使用NSFileProtectionComplete它的水平。

有任何想法吗?

4

1 回答 1

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为设备解锁时来缓解。
于 2013-08-27T17:09:41.043 回答