8

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

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL];

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

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

如何处理这种情况?

4

1 回答 1

10

首先,请参阅 WWDC 2013 视频中的第 204 节“多任务处理的新功能”。它涵盖了这种情况。

您可以按照安全偏好的顺序采取几种方法:

  • 将数据写入另一个位置(使用NSFileProtectionCompleteUnlessOpen),直到设备解锁,然后合并。这通常是首选方法。
  • 将主数据库设置为NSFileProtectionCompleteUnlessOpen并保持打开状态。
  • 将您的数据库设置为NSFileProtectionCompleteUntilFirstUserAuthentication. 这通常是最糟糕的方法。
于 2013-09-23T13:28:07.347 回答