2011-06-29 38 views
11

我使用NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)讓我的應用程序的申請文件目錄,但所返回數組只包含一個對象,這是一個不可寫的,不正確的目錄:NSSearchPathForDirectoriesInDomains返回錯誤的目錄

/用戶/我/圖書館/應用程序支持/ iPhone模擬器/文檔

我發現this question這表明問題與供應有關,但答案只是略多於此。所以我想我在問一個重複的問題,但這個問題的答案是不夠的,所以我希望能在這個問題上得到一個真正的答案。

+1

對這個問題的回答的確非常不滿意。當你在這裏找到解決方案時,請標記一個mod來合併/關閉另一個。 –

+0

控制檯是否顯示任何錯誤? –

+0

其他一些答案/評論似乎表明這個函數實際上可能會返回一個包含*多於一個*目錄的數組。你可以檢查一下,看看是不是? – jtbandes

回答

7

嗯...所以返回的目錄可能會有所不同,以至於您對應用程序的期望可能與Xcode目標類型有關。這不會成爲測試目標嗎?在這種情況下,正確的答案很可能是沒有應用程序GUID的答案,因爲實際上它不是應用程序。這個google group discussion意味着如果是這樣的話,你只需簡單地創建目錄即可。

只是爲了咧嘴笑,我從終端窗口創建了目錄/用戶/我/圖書館/應用程序支持/ iPhone模擬器/文檔,現在它似乎運行。仍然存在測試錯誤,但這些錯誤可能是真實的。

我建議你改變你的測試應用程序創建的文件目錄,如果它是缺失的 - 是這樣的:

if(![[NSFileManager defaultManager] createDirectoryAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) withIntermediateDirectories:YES attributes:nil error:NULL]) 
     NSLog(@"Error: Create folder failed %@", NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)); 
2

這個工作對我來說:

[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
             inDomains:NSUserDomainMask] lastObject]; 
+1

感謝您的回答。不幸的是,URLsForDirectory:inDomains:僅適用於iOS 4.0及更高版本,我支持3.1.3。有另一種方法可以找到4.0以前的這個目錄嗎? –

+1

我沒有你的答案,但爲什麼你仍然支持3.x? <5%的用戶不會失去生產力。 – vocaro

+0

我試過這種方法,但有同樣的問題。它給了我與NSSearchPathForDirectoriesInDomains完全相同的目錄。 –

1

你可以試試這個:

/** 
Returns the path to the application's Documents directory. 
*/ 
- (NSString *)applicationDocumentsDirectory { 
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
} 

我相信你只是缺少lastObject消息。

+0

謝謝。事實上,這就是我正在做的事 - 從lastObject返回的NSString是在問題中指定的不正確的路徑。 –

+0

@Josh Brown消息是否返回數組中的多個項目?是否嘗試寫入任何返回路徑? –

+0

@Josh Brown這個問題也可能與msg stringByAppendingPathComponent有關:如果你沒有傳遞一個有效的文件名。 –

0

我有完全相同的問題,在我的情況,那是因爲我m從XCTest類運行代碼。

我的猜測是測試不在應用程序沙箱中運行。

這是因爲我的測試與靜態庫項目相關,包括在主項目中。

只要運行完我的應用程序中相同的代碼,路徑就會正確返回。

希望這會有所幫助。

相關問題