0
好吧,我的问题很简单,但我绝对找不到一个简单的答案。所以,如果你能帮忙,我会很高兴。允许的应用文件位置 - 有或没有沙盒
我想要什么:
的地方(无论是在10.6 - 无沙箱 - 或10.7及更高版本,与沙盒),其中我的应用程序可以自由地写一些数据。
几句话:
- 我想知道是否有任何系统的功能(例如
NSHomeDirectory()
),它指向一个安全的位置,我写信给(OS X版本不应该的问题) 。
好吧,我的问题很简单,但我绝对找不到一个简单的答案。所以,如果你能帮忙,我会很高兴。允许的应用文件位置 - 有或没有沙盒
我想要什么:
的地方(无论是在10.6 - 无沙箱 - 或10.7及更高版本,与沙盒),其中我的应用程序可以自由地写一些数据。
几句话:
NSHomeDirectory()
),它指向一个安全的位置,我写信给(OS X版本不应该的问题) 。好的,在这里,我回答了我自己的问题。
那么,如果我们只需要访问应用程序支持目录(并创建它,如果它不存在),无论我们在10.6(没有沙箱启用)或10.7 +?
这里的通用解决方案(我自己写了NSFileManager
为一类,但即使是一个简单的函数或宏可以做...):
接口:
// NSFileManager+Paths.h
#import <Foundation/Foundation.h>
@interface NSFileManager (Paths)
+ (NSString*)applicationSupportDirectory;
@end
执行:
// NSFileManager+Paths.m
#import "NSFileManager+Paths.h"
@implementation NSFileManager (Paths)
+ (NSString*)applicationSupportDirectory
{
NSError *error;
return [[[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error] path];
}
@end
很简单,呵呵?
提示:请各位看看下面的修复 2个评论这个回答一个更优雅的解决方案。
这里有一个问题,那就是你完全正确:这将返回到应用程序支持目录的路径。当你被沙箱化时,这不是什么大问题,但是当你没有时,将随机文件直接存入〜/ Library/Application Support是不礼貌的。您应该在Application Support中创建一个目录并返回该目录的路径。最好在这里执行,而不是在代码中的任何地方,您需要在应用程序支持中访问文件夹中的某些内容。 – 2013-02-12 06:46:35
@PeterHosey是的,你说得对。而这正是我最终做的:附加一个固定路径组件(我的bundle id:'[[NSBundle mainBundle] bundleIdentifier]')。希望我们这样安全...... – 2013-02-12 06:48:49