2011-10-02 123 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;