这是我用于在iOS上创建和访问重要配置文件的NSURL
对象,具有以下功能:
- 对用户 隐藏
- 不是用户生成的文件(存储与用户相关的配置)
- 不是临时的或缓存的(不可能稍后用现有数据创建)
必须备份到iCloud/iTunes
[NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/important.txt"]];
根据FileSystemOverview (developer.apple.com)中的建议,我将此文件存储在Library
下。也许更好的办法是把它保存在Library/Application Support
下。
使用NSSearchPathForDirectoriesInDomains
,它需要:
-
enum NSSearchPathDirectory
-
NSApplicationDirectory
-
NSDeveloperApplicationDirectory
-
NSLibraryDirectory
-
NSDeveloperDirectory
-
NSApplicationSupportDirectory
- …
-
-
enum NSSearchPathDomainMask
-
NSUserDomainMask
-
NSLocalDomainMask
-
NSSystemDomainMask
- …
-
-
BOOL expandTilde
这是存储这种文件的正确方法吗?
NSSearchPathDirectory
和NSSearchPathDomainMask
有两个替代方案。
还有expandTilde
,在iOS上是必要的吗?
是否有更好的方法,而不是使用objectAtIndex
创建NSString
路径并附加文件名,然后将其转换为NSURL
?
谢谢。
使用NSApplicationSupportDirectory
将是我的首选。
但请记住以下几点:
- 与"Documents"文件夹不同,"Library/Application Support"文件夹默认不存在于iOS应用程序沙盒中,所以你必须在尝试使用它之前创建该文件夹。
- "Hidden from the user"仅意味着用户在正常情况下不会看到它。但是该文件很容易被任何具有任何技术知识的人访问。
你想传递YES
的expandTilde
参数,所以你的应用程序返回一个正确的路径,当你在模拟器中运行应用程序。在真正的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"];