ios - 在 iOS 中访问本地存储的(对用户隐藏,在库下)文件

标签 ios

这是我用来在 iOS 上创建和访问具有以下功能的重要配置文件的 NSURL 对象:

  • 对用户隐藏
  • 不是用户生成的文件(存储与用户相关的配置)
  • 不是临时文件或缓存(稍后无法​​使用现有数据创建)
  • 必须由 iCloud/iTunes 备份

    [NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains(
                             NSLibraryDirectory,
                             NSUserDomainMask,
                             YES) objectAtIndex:0]
    stringByAppendingString:@"/important.txt"]];
    

FileSystemOverview (developer.apple.com) 中的建议,我将此文件存储在 Library 下。 也许更好的方法是将其存储在 Library/Application Support 下。

使用 NSSearchPathForDirectoriesInDomains,需要:


这是存储此类文件的正确方法吗?

NSSearchPathDirectoryNSSearchPathDomainMask 有几个替代方案。

还有 expandTilde 呢,在 iOS 上有必要吗?

有没有更好的方法,而不是使用 objectAtIndex 将路径创建为 NSString 并附加文件名,然后将其转换为 NSURL?

谢谢。

最佳答案

使用 NSApplicationSupportDirectory 将是我的首选。

但请记住以下几点:

  1. 与“Documents”文件夹不同,“Library/Application Support”文件夹在默认情况下不存在于 iOS 应用沙箱中,因此您必须先创建该文件夹,然后再尝试使用它。
  2. “对用户隐藏”仅表示用户在正常情况下不会看到它。但是任何具有任何技术知识的人都可以轻松访问该文件。

您确实希望为 expandTilde 参数传递 YES,以便您的应用在模拟器中运行时返回正确的路径。在真实的 iOS 设备上,这没什么区别。

不要使用 stringByAppendingString: 来创建路径。使用 stringByAppendingPathComponent:

NSString *appSupportPath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [appSupportPath stringByAppendingPathComponent:@"important.txt"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];

您可以使用 NSFileManager 直接获取 NSURL:

NSURL *appSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *fileURL = [appSupportURL URLByAppendingPathComponent:@"important.txt"];

关于ios - 在 iOS 中访问本地存储的(对用户隐藏,在库下)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936625/

相关文章:

iphone - 从 iOS 设备读取蓝牙 MAC 地址

ios - 构建 XCTest 时找不到文件错误

ios - 尝试重新访问之前在 SwiftUI 中单击的 NavigationLink 时,NavigationLink 卡住

ios - 来自 Swift 3 中路径或文件名的 UIImage

ios - 如何使用 iOS 14 触发多播权限的本地网络对话授权

ios - UIView 的调试 View 中的 frame 属性在哪里?

ios - 如何确保 View Controller 在 segueing 时不会重新加载?

ios - swift 中的 `didset` 和 `willset` 有什么区别?

ios - MKMarkerAnnotationView 在 iPhone X 上不显示

ios - 无法访问资源包