这是我用来在 iOS 上创建和访问具有以下功能的重要配置文件的 NSURL
对象:
- 对用户隐藏
- 不是用户生成的文件(存储与用户相关的配置)
- 不是临时文件或缓存(稍后无法使用现有数据创建)
必须由 iCloud/iTunes 备份
[NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/important.txt"]];
如 FileSystemOverview (developer.apple.com) 中的建议,我将此文件存储在 Library
下。
也许更好的方法是将其存储在 Library/Application Support
下。
使用 NSSearchPathForDirectoriesInDomains
,需要:
-
NSApplicationDirectory
NSDeveloperApplicationDirectory
NSLibraryDirectory
NSDeveloperDirectory
NSApplicationSupportDirectory
- ...
-
NSUserDomainMask
NSLocalDomainMask
NSSystemDomainMask
- ...
BOOL expandTilde
这是存储此类文件的正确方法吗?
NSSearchPathDirectory
和 NSSearchPathDomainMask
有几个替代方案。
还有 expandTilde
呢,在 iOS 上有必要吗?
有没有更好的方法,而不是使用 objectAtIndex
将路径创建为 NSString
并附加文件名,然后将其转换为 NSURL
?
谢谢。
最佳答案
使用 NSApplicationSupportDirectory
将是我的首选。
但请记住以下几点:
- 与“Documents”文件夹不同,“Library/Application Support”文件夹在默认情况下不存在于 iOS 应用沙箱中,因此您必须先创建该文件夹,然后再尝试使用它。
- “对用户隐藏”仅表示用户在正常情况下不会看到它。但是任何具有任何技术知识的人都可以轻松访问该文件。
您确实希望为 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/