我正在使用NSFileProtectionKey属性的文件安全性,如下所示:
[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL];
因此,当设备密码锁定时,无法打开该路径中的任何文件。问题是,即使设备被锁定,iOS7应用程序也可以在后台运行。当像这样运行时,核心数据[NSManagedObjectContext save:]
将失败并显示错误:
NSCocoaErrorDomain, 134030, 操作无法™完成。 (可可错误 134030。{ NSSQLiteErrorDomain = 23;NSUnderlyingException ="更新最大 pk 失败:授权 被拒绝";}
如何处理这种情况?
首先,请参阅WWDC 2013视频中的会话204"多任务处理的新增功能"。它涵盖了这种情况。
您可以采用多种方法(按安全首选项的顺序):
- 将数据写入另一个位置(使用
NSFileProtectionCompleteUnlessOpen
),直到设备解锁,然后合并。这通常是首选方法。 - 将主数据库设置为
NSFileProtectionCompleteUnlessOpen
并使其保持打开状态。 - 将数据库设置为
NSFileProtectionCompleteUntilFirstUserAuthentication
。这通常是最糟糕的方法。