设备锁定时的文件安全性以及iOS7中的后台提取

8su*_*has 7 core-data nsfilemanager ios ios7

我使用NSFileProtectionKey属性使用文件安全性,如下所示:

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL];
Run Code Online (Sandbox Code Playgroud)

因此,当设备锁定密码时,不能打开该路径中的文件.问题是,即使设备被锁定,iOS7应用程序也可以在后台运行.当像Coredata一样运行时[NSManagedObjectContext save:]会失败并出现错误:

NSCocoaErrorDomain,134030,操作无法完成.(可可错误134030.){NSSQLiteErrorDomain = 23; NSUnderlyingException ="更新max pk失败:授权被拒绝"; }

如何处理这种情况?

Rob*_*ier 8

首先,请参阅WWDC 2013视频中的会议204"多任务处理的新功能".它涵盖了这种情况.

根据安全性偏好,您可以采取以下几种方法:

  • 将数据写入另一个位置(使用NSFileProtectionCompleteUnlessOpen),直到设备解锁,然后合并.这通常是首选方法.
  • 将主数据库设置为NSFileProtectionCompleteUnlessOpen并保持打开状态.
  • 将数据库设置为NSFileProtectionCompleteUntilFirstUserAuthentication.这通常是最糟糕的方法.