2010-04-24 186 views
1

我與路徑,相對路徑,一個NSBundle和麻煩了所有的路徑/文件相關操作:)永久文件更改

雖然我跑寄託都順利,但所有的文件變化不是模擬器永久的,所以每次我運行我的應用程序,我不得不重複我的應用程序的初始設置。

問題: 什麼是讀寫文件(從資源目錄),並讓所有的文件永久改變(更新到項目文件夾)的正確方法?

謝謝

編輯:我寫了一個簡單的方法來做到這一點,它是正確的?

-(NSString *) getPath:(NSString *)forResource 
{ 
    NSString *pathRes, *docPath, *destPath; 
    NSArray *foundPaths; 
    NSFileManager *fs = [[NSFileManager alloc] init]; 

    foundPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    docPath = [foundPaths objectAtIndex:0]; 
    destPath = [[NSString stringWithFormat:@"%@/%@",docPath,forResource] stringByStandardizingPath]; 


    if(![fs fileExistsAtPath:destPath]) 
    { 
     pathRes = [[NSBundle mainBundle] pathForResource:forResource ofType:nil]; 
     [fs copyItemAtPath:pathRes toPath:destPath error:nil]; 
    } 

    return destPath; 
} 
+0

AFAIK爲了使更改保持不變,您必須使用首頁按鈕關閉應用程序並從模擬器本身重新啓動它。從Xcode運行重置它。 – Rengers 2010-04-25 16:52:13

回答

2

您無法寫入設備上的應用程序文件夾。將任何持久數據寫入文檔目錄。您可以將資源目錄中的文件複製到第一次運行時的文檔目錄以保留您的現有邏輯。

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask , YES); 
+0

haaaa,所以「捆綁」它是.app文件和它在裏面的「資源」目錄,但它是隻讀的......它是正確的? – Cesar 2010-04-24 06:49:37

+0

是的。對於應用程序來說,修改自身是一種糟糕的形式,iPhoneOS會強制執行此操作。 – drawnonward 2010-04-24 15:46:30

+0

感謝您的回答,現在更清楚它的工作原理。它糾正了我發佈到問題中的小方法? – Cesar 2010-04-25 00:46:22