2

我只是被困在项目的中间。

我的目标是保护我的数据

我浏览了 Nickharris 博客关于(核心数据和企业 iPhone 应用程序 - 保护您的数据

但在结论中明确提到:

如果您的应用程序需要在任何后台处理中存储您的核心数据,那么您就不能使用数据保护。任何访问NSFileProtectionComplete 文件的尝试都会导致异常

我在后台处理中使用核心数据。

请帮助解决这个问题。我无论如何都想加密和保护我的数据

谢谢, 塔里克

4

3 回答 3

5

在 iOS 5 上,您可以使用其中任何一个,但它们中的每一个仍然有一个问题。

  1. NSFileProtectionCompleteUnlessOpen - 文件以加密格式存储在磁盘上,必须在设备解锁时打开。一旦打开,您的文件可能会继续正常访问该文件,即使用户锁定了设备。

  2. NSFileProtectionCompleteUntilFirstUserAuthentication - 该文件以加密格式存储在磁盘上,直到设备启动后才能访问。在用户第一次解锁设备后,您的应用程序可以访问该文件并继续访问它,即使用户随后锁定了设备。

来源:iOS 开发者库

于 2011-12-09T07:56:13.270 回答
4

根据文档NSFileProtectionComplete 规定,当应用程序处于后台(或未运行)时,无法读取或写入文件。

您应该可以在应用程序运行时读取/写入 SQLite 存储,但是当它处于“后台”时您将无法访问它。

这意味着利用 iOS 后台 API 的操作如下:

  • 推送通知
  • 背景音频/位置
  • 任务完成(背景)
  • IP语音

将无权访问您的 SQLite 存储。但是,当应用程序运行时,您应该能够像往常一样访问 NSPersistentStoreCoordinator。我怀疑设备端测试会导致无法从其中一个后台 API 创建持久存储协调器。

于 2010-11-22T20:20:10.743 回答
-4

在主线程中进行文件访问调用 - 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
    ....
}

希望有帮助。

于 2010-11-22T10:04:49.583 回答