iOS 完整数据保护 + 应用程序 :performFetchWithCompletionHandler

标签 ios objective-c cocoa-touch sqlite

我有一个 iPad 应用程序,它使用完整数据保护来加密应用程序的内容,除非设备已解锁并运行。这是客户要求的,并且按预期工作。

第二个业务需求是我们在后台运行一些 Web 服务调用。这是使用新的 application:performFetchWithCompletionHandler 完成的。在 iOS 7 中可用。我需要从本地 SQLite 数据库中提取一些数字来与 Web 服务的结果进行比较,以便了解是否需要启动后台下载。这是失败的。

有没有办法配置数据保护,以便我的应用程序可以在后台读取 SQLite 数据库?

可以逐个文件设置权限吗?

如果做不到这一点,任何人都可以提出解决方法吗? NSUserDefaults? plist 文件?还有什么?

谢谢。

最佳答案

NSFileProtectionComplete 时,您无法从 sqlite 数据库中读取数据。已启用且设备已锁定。然而,Apple 在 2013 年 WWDC 视频“What's New with Multitasking”@https://developer.apple.com/videos/wwdc/2013/ 中描述了如何处理这种情况。在 44:00 左右。

因为你的 SQLite 文件设置为 NSFileProtectionComplete ,您无法在设备锁定时对其进行写入或读取。您应该做的是将任何新数据(在设备锁定时在后台下载)写入磁盘上的单独文件,级别为 NSFileProtectionCompleteUnlessOpen。 .这将允许您将数据写入磁盘,并且在您关闭文件时数据将受到保护。当 protected 数据可用(设备已解锁)时,您应该将数据合并到您的数据库中。

您可能想尝试在磁盘上创建一个文件,其中包含确定何时发出新数据请求所需的信息。如果将此文件设置为级别 NSFileProtectionCompleteUntilFirstUserAuthentication当设备被锁定时,您应该仍然可以阅读它。

关于iOS 完整数据保护 + 应用程序 :performFetchWithCompletionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481894/

相关文章:

ios - UIBezierPath 大,渲染速度慢

iphone - 上传中断时最好的交互方式是什么?

ios - 设置 AppleLanguages 在 iOS 7 上不起作用?

iphone - 从手机获取 safari 历史记录

objective-c - NSURLSession 确保上传有效

iphone - iPhone-关于内存使用情况,NSString和NSMutableString之间的区别

ios - IOS 的混合事件推送通知似乎尚未在 mobilefirst 7.1 上处理

ios - 在 cellForRowAtIndexPath 中使用 NSLog 获取 NSCFString objectAtIndexedSubscript

iphone - OCMock 测试失败 - 未调用预期的方法

ios - 我们可以在 IOS 应用程序的 UIWebview 中将条款和条件作为 PDF 加载吗?