2011-10-02 122 views
1

我刚才一直在研究这个代码,检查文件是否存在:NSSearchPathForDirectoriesInDomains解释混淆

NSString *path; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"SomeDirectory"]; 
path = [path stringByAppendingPathComponent:@"SomeFileName"]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) 
{ 

,但我有点困惑。通过下面一行:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

好的。我理解的方法NSSearchPathForDirectoriesInDomains返回,这取决于你进入这个方法的参数的路径。但是这个用户(谁写的代码)是盲目地传入一整堂课! (引用NSDocumentDirectory,NSUserDOmainMask)。他唯一正确传递的是BOOL YES。我检查了苹果文档,它这样说:

NSSearchPathForDirectoriesInDomains创建一个目录搜索路径列表。

NSArray * NSSearchPathForDirectoriesInDomains (
NSSearchPathDirectory directory, 
NSSearchPathDomainMask domainMask, 
BOOL expandTilde 
); 

我在苹果的文档搜索NSSearchPathDirectory和NSSearchPathDomainMask他们建议我一定要通过一些

这表明需要传递到方法是多少?有人可以解释这条线吗?在此基础框架常量的感谢

回答

11

阅读文档:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html#//apple_ref/doc/c_ref/NSDocumentDirectory

这是正确的用法,因为这些都不是类,但常量!


NSSearchPathDomainMask

搜索路径域常数指定用于所述NSSearchPathDirectory型基极的位置。

enum { 
    NSUserDomainMask = 1, //this one 
    NSLocalDomainMask = 2, 
    NSNetworkDomainMask = 4, 
    NSSystemDomainMask = 8, 
    NSAllDomainsMask = 0x0ffff, 
}; 
typedef NSUInteger NSSearchPathDomainMask; 

NSSearchPathDirectory

这些常量指定的各种目录的位置。

enum { 
    NSApplicationDirectory = 1, 
    NSDemoApplicationDirectory, 
    NSDeveloperApplicationDirectory, 
    NSAdminApplicationDirectory, 
    NSLibraryDirectory, 
    NSDeveloperDirectory, 
    NSUserDirectory, 
    NSDocumentationDirectory, 
    NSDocumentDirectory, // this one 
    NSCoreServiceDirectory, 
    NSAutosavedInformationDirectory = 11, 
    NSDesktopDirectory = 12, 
    NSCachesDirectory = 13, 
    NSApplicationSupportDirectory = 14, 
    NSDownloadsDirectory = 15, 
    NSInputMethodsDirectory = 16, 
    NSMoviesDirectory = 17, 
    NSMusicDirectory = 18, 
    NSPicturesDirectory = 19, 
    NSPrinterDescriptionDirectory = 20, 
    NSSharedPublicDirectory = 21, 
    NSPreferencePanesDirectory = 22, 
    NSItemReplacementDirectory = 99, 
    NSAllApplicationsDirectory = 100, 
    NSAllLibrariesDirectory = 101 
}; 
typedef NSUInteger NSSearchPathDirectory;