我只是被困在项目的中间。
我的目标是保护我的数据。
我浏览了 Nickharris 博客关于(核心数据和企业 iPhone 应用程序 - 保护您的数据)
但在结论中明确提到:
如果您的应用程序需要在任何后台处理中存储您的核心数据,那么您就不能使用数据保护。任何访问NSFileProtectionComplete 文件的尝试都会导致异常。
我在后台处理中使用核心数据。
请帮助解决这个问题。我无论如何都想加密和保护我的数据
谢谢, 塔里克
我只是被困在项目的中间。
我的目标是保护我的数据。
我浏览了 Nickharris 博客关于(核心数据和企业 iPhone 应用程序 - 保护您的数据)
但在结论中明确提到:
如果您的应用程序需要在任何后台处理中存储您的核心数据,那么您就不能使用数据保护。任何访问NSFileProtectionComplete 文件的尝试都会导致异常。
我在后台处理中使用核心数据。
请帮助解决这个问题。我无论如何都想加密和保护我的数据
谢谢, 塔里克
在 iOS 5 上,您可以使用其中任何一个,但它们中的每一个仍然有一个问题。
NSFileProtectionCompleteUnlessOpen - 文件以加密格式存储在磁盘上,必须在设备解锁时打开。一旦打开,您的文件可能会继续正常访问该文件,即使用户锁定了设备。
NSFileProtectionCompleteUntilFirstUserAuthentication - 该文件以加密格式存储在磁盘上,直到设备启动后才能访问。在用户第一次解锁设备后,您的应用程序可以访问该文件并继续访问它,即使用户随后锁定了设备。
来源:iOS 开发者库
根据文档NSFileProtectionComplete 规定,当应用程序处于后台(或未运行)时,无法读取或写入文件。
您应该可以在应用程序运行时读取/写入 SQLite 存储,但是当它处于“后台”时您将无法访问它。
这意味着利用 iOS 后台 API 的操作如下:
将无权访问您的 SQLite 存储。但是,当应用程序运行时,您应该能够像往常一样访问 NSPersistentStoreCoordinator。我怀疑设备端测试会导致无法从其中一个后台 API 创建持久存储协调器。
在主线程中进行文件访问调用 - 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
....
}
希望有帮助。