2013-08-06 21 views
0

我注意到,使用節能內的iOS應用程序從文件時:
writeToFile:myFile atomically:YES
導入文本文件轉換成iOS應用

生成的文件實際上是XML格式保存,始終具有下面的代碼:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <string>Sentence 1</string> 
    <string>Sentence 2</string> 
    <string>Sentence 3</string> 
    <string>Sentence 4</string> 
</array> 
</plist> 

所以它總是以XML /的plist格式。

但是,如果我嘗試將一個文本文件導入到應用程序中,該文件不是從創建的,而是在iOS應用程序的中創建的 - 它似乎不知道如何識別它。

例如,如果我走在TextEdit中創建一個純文本文件,並將其拖到我的應用程序的文檔文件夾,然後再次運行該應用程序,該應用程序看到這個新的文件,但是當我嘗試使用加載的內容: initWithContentsOfFile:myFile
結果我得到的是:(null)

這是因爲在TextEdit中創建的文件的默認格式是「的.rtf」?或者我應該使用完全不同的方法將純文本文件讀入應用程序,而不是 initWithContentsOfFile:myFile

最終,我希望應用程序能夠加載現有的文本文件 - 甚至可能是Microsoft WORD文件 - 並與它們一起工作。我希望用戶將其現有文件拖放到iTunes的應用程序文件夾中,然後將其設備與iTunes同步 - 然後將這些新文件複製到設備上,當他們再次運行應用程序時,應用程序將看到新文件並能夠打開它們並閱讀它們的內容。

有什麼建議嗎?

回答

1

你已經提到了writeToFile:atomically:方法,但是你還沒有告訴我們這個方法被調用的是什麼類。例如,NSStringNSArray,NSDictionary和其他類都有一個帶有這個名稱的方法,它們的行爲與預期給定的不同類型的數據結構的行爲不同。

從上面的文件輸出看來,您可能正在調用NSArray這就是爲什麼它會以Plist格式編寫的原因。我向你保證,串獲得書面顯然,如果你使用NSString,如:

NSString *s = @"A string"; 
[s writeToFile:path atomically:YES]; 

將產生一個文件:

A String 

您可能需要各種其他數據結構轉換成字符串你面前將它寫入一個文件。

+0

好的,我不知道其他類也有'writeToFile:atomically:'方法 - 或者'initWithContentsOfFile'方法。很高興知道:-)你說得對:我正在使用NSArray的保存方法。就在我試着用NSString的'initWithContentsOfFile'方法閱讀一個在TextEdit中創建的純文本文件 - 並且它工作了(這意味着我沒有得到'(null)') - 這很好。接下來,我嘗試閱讀使用TextEdit創建的* RTF *文件,除此之外,我還收到了很多垃圾字符,例如:{{rtf1 \ ansi \ ansicpg1252 \ cocoartf1187 \ cocoasubrtf390' - 任何想法如何擺脫這些? – sirab333

+0

那些不是垃圾字符 - 那些是RTF代碼。請參閱http://en.wikipedia.org/wiki/Rich_Text_Format – Marplesoft

+0

是的,我知道它們不是垃圾郵件 - 我知道RTF是什麼 - 這就是爲什麼我特別試圖在第一個應用程序中測試加載這樣的文件看看它是如何處理它的所有格式化代碼/字符(「垃圾」:-)) - 這導致我重複這個問題:你知道如何去除那些字符或者將rtf文件轉換爲純文本文件 - 在運行時,在運行時?它甚至有可能嗎? – sirab333