核心数据处理在后台时需要完整的数据保护
Posted
技术标签:
【中文标题】核心数据处理在后台时需要完整的数据保护【英文标题】:Need complete Data protection while Core Data processing is in background 【发布时间】:2010-11-22 06:49:31 【问题描述】:我只是卡在项目的中间。
我的目标是保护我的数据。
我浏览过 Nickharris 的博客 (Core Data and Enterprise iPhone Applications – Protecting Your Data)
但在结论中明确提到:
如果您的应用程序需要您的Core Data 存储在任何后台处理中,那么您不能使用数据保护。任何尝试访问 NSFileProtectionComplete 的文件都会导致异常。
我在后台处理中使用核心数据。
请对此提供帮助。我无论如何都想加密和保护我的数据
谢谢, 塔里克
【问题讨论】:
你在做什么样的后台处理? 【参考方案1】:在 ios 5 上,您可以使用其中任何一个,但每个都有一个问题。
NSFileProtectionCompleteUnlessOpen - 文件以加密格式存储在磁盘上,必须在设备解锁时打开。一旦打开,您的文件可能会继续正常访问该文件,即使用户锁定了设备。
NSFileProtectionCompleteUntilFirstUserAuthentication - 文件以加密格式存储在磁盘上,直到设备启动后才能访问。用户首次解锁设备后,您的应用程序可以访问该文件并继续访问该文件,即使用户随后锁定了该设备。
来源:iOS Developer Library
【讨论】:
有什么问题?你会推荐哪一个?【参考方案2】:根据documentation NSFileProtectionComplete 规定,当应用程序处于后台(或未运行)时,无法读取或写入文件。
您应该可以在应用程序运行时读取/写入 SQLite 存储,但是当它处于“后台”时您将无法访问它。
这意味着利用 iOS 后台 API 的操作如下:
推送通知 背景音频/位置 任务完成(背景) IP 语音将无法访问您的 SQLite 存储。但是,当应用程序运行时,您应该能够像往常一样访问 NSPersistentStoreCoordinator。我怀疑设备端测试会导致无法从其中一个后台 API 创建持久存储协调器。
【讨论】:
【参考方案3】:在主线程中进行文件访问调用 - NSObject 上有一个非常有用的方法可以帮助你:)
// When you need to get the data from the file do this :
NSData *data = [self performSelectorInMainThread:@selector(getFileData:) withObject:filename waitUntilDone:YES];
// And somewhere else in your class have this method
- (NSData *)getFileData:(NSString *)filename
...
// Get data from file and return it
....
希望对您有所帮助。
【讨论】:
我认为他的意思是应用程序在后台,而不是来自后台线程。当应用程序处于前台时,即使使用 NSFileProtectionComplete,您仍然可以从后台线程访问数据库。以上是关于核心数据处理在后台时需要完整的数据保护的主要内容,如果未能解决你的问题,请参考以下文章
iOS 完整数据保护 + 应用程序:performFetchWithCompletionHandler