2011-09-14 128 views
1

在我的應用程序中,用戶可以通過彈出對話框選擇圖像。他們第一次這樣做一切都按預期工作,並且在添加圖像fileExistsAtPath期間:isDirectory被調用並且dir返回NO。但是,當用戶第二次選擇圖像時,fileExistsAtPath:isDirectory總是返回YES(即使它不是目錄)。我遇到了fileExistsAtPath問題:isDirectory

-(void) addImagesWithPath:(NSURL *)fileURL recursive:(BOOL) recursive{ 
    int i, n; 
    BOOL dir; 
    NSError *error; 
    NSURL *newURL; 

    [[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString] isDirectory:&dir]; 

編輯:如果我添加「DIR = NO」的方法之前調用它似乎工作,但感覺就像一個黑客攻擊。

+0

你在檢查'dir'的內容之前檢查'-fileExistsAtPath:isDirectory:'的返回值嗎?看起來你不是來自你問題中的代碼,如果你列出你正在使用的完整/相關的代碼,它可能會有所幫助。 – 2011-09-14 15:04:46

+0

當我檢查返回值時,無論文件是否存在,它都始終爲false。 – LDK

回答

6

您應該總是在檢查第二個(輸出)參數的內容之前檢查返回值-[NSFileManager fileExistsAtPath:isDirectory:]。輸出參數僅在方法返回YES時纔有意義。這在documentation描述:

返回時,包含YES如果路徑是目錄或者如果最終路徑元件是符號鏈接指向一個目錄,否則包含NO如果路徑不存在,返回值是未定義的。如果您不需要此信息,請通過NULL

如果方法返回NO那麼路徑不存在或您的應用程序無法訪問它。如果確實存在,請檢查您的路徑是否是完整路徑(例如,它不應以~開頭)。

另外,當傳遞路徑到NSFileManager時,您應該使用-[NSURL path]而不是-[NSURL absoluteString]

+0

問題的一部分是我迷惑了路徑和URL ...... – LDK