2013-04-03 25 views
0

在我設計的應用程序中,我有幾個文本字段,當應用程序關閉時保存爲.txt文件,然後在應用程序打開時再讀回;但是,當我嘗試分發應用程序時(只是將其作爲應用程序導出並將其保存到某些朋友),我發送給它的人沒有我要保存在其計算機上的文件位置,所以文本字段不保存。有什麼方法可以在應用程序下載時在計算機上創建.txt文件?還是有更好的方式來保存分發比做.txt文件?謝謝。可可在保存文本文件時分發

+1

Package Maker在這些情況下是天賜之物。只要你不反對寫腳本,就是這樣。 – CodaFi

+1

更新了我的答案。對此感到抱歉。 – daltonclaybrook

回答

1

爲什麼不直接使用和NSUserDefaults的存儲應用程序的偏好數據庫(希望相當小)的文本?它保證存在並且可以訪問,不會受到沙箱限制或非標準存儲位置的影響。

除此之外,如果您想直接回答您的問題,則需要提供更多信息。具體而言,您使用的確切路徑是什麼以及您收到的確切錯誤是什麼?爲什麼當你需要在運行時創建文件時,你需要捆綁空的文本文件?

+0

如果我可以在第一次運行時創建文件,我不覺得需要捆綁空的文本文件。你會如何推薦我這樣做?另外,使用NSUserDefaults來存儲程序的保存文件通常是一種很好的做法嗎?如果他們是更大的文件,即。自定義對象? –

+0

請提供我要求的信息。您應該能夠在運行時創建該文件;如果你不能,發佈你遇到的*實際錯誤*。 –

+0

做了更多的研究並想出瞭如何在運行時創建文件。這就是我真正所要求的,對於混淆抱歉,我並不真正知道我在做什麼。沒有錯誤,我只是不知道該怎麼做。 –

1

我只是將最初的.txt文件打包到應用程序包中。檢查文件是否存在於用戶的本地文件系統上。如果沒有,請將您的包的.txt文件讀取到一個字符串中,然後將該字符串保存到用戶文件系統的正確位置。

NSError *fileError = nil; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
    //Read the file 
    NSString *fileContents = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&fileError]; 
    if (fileError) { 
     //Handle the error 
    } 
} else { 
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"initialFile" ofType:@"txt"]; 
    NSString *initialFileContents = [[NSString alloc] initWithContentsOfFile:bundlePath encoding:NSUTF8StringEncoding error:&fileError]; 
    if (!fileError) { 
     [initialFileContents writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&fileError]; 
     if (fileError) { 
      //Handle the error 
     } 
    } 
} 
+0

所以你的建議是我創建空的文本文件並將它們與應用程序捆綁在一起?我該怎麼做呢?或者像Joshua Nozzi建議的那樣,在運行時創建文件會更好一些。 –

+0

對於空文件完全沒有必要。 –

+1

我建議捆綁它們的唯一原因是因爲我認爲最初的文本文件需要已經有一些文本。不,你應該在第一次需要保存文本時創建文件。我想我真的不明白你的問題。當你調用'writeToFile:atomically:encoding:error'時,如果文件不存在於指定的位置,它將在那裏創建一個文件,除非路徑中的一個或多個目錄不存在,你應該調用NSFileManager的'createDirectoryAtPath:withIntermediateDirectories:attributes:error:'方法。 – daltonclaybrook