2011-10-19 15 views
0

我曾經在網站上看過類似於這個的其他幾個人的問題,但沒有發現任何幫助解決這個問題......所以我試圖讀取一個文本文件,這是相同的目錄作爲我的主程序,我也將它導入到項目本身的代碼下面,然後輸出它,歡迎任何建議,謝謝!閱讀目標C中的文本文件

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"allshows" 
            ofType:@"txt"]; 
NSLog(@"filePath: %@", filePath); 

NSString *fileString = [NSString stringWithContentsOfFile:filePath]; 
NSLog(@"fileString: %@", fileString); 

NSArray *lines = [fileString componentsSeparatedByString:@"\n"]; 
NSLog(@"arrayLines: %@", lines); 

和輸出看起來是這樣的:

filePath: (null) 
fileString: (null) 
arrayLines: (null) 

正如我所說,該文件 「allshows.txt」 是在同一目錄 「Epguides.m」(主目錄)。

任何想法我失蹤?這是我第一次真正嘗試在目標C中的程序,如果這不明顯lol

謝謝!

已解決 - 感謝您的努力。

+2

包含在項目中的文件?否則,它不會在編譯過程中的應用程序捆綁在一起,而不是在運行時 –

+0

我是這麼認爲的訪問,我在添加文件到實際項目窗口,我沒有 - 項目>添加到項目>選擇的文件,並將其與其他項目一起出現在項目文件列表中。 – Didier

+0

您可以在項目設置中檢查它,確保它包含在構建的複製資源階段。這是你的目標,然後構建階段,然後複製包資源 – utahwithak

回答

1

嘗試用於獲取路徑和內容此替代方法,這是我目前正在使用一個項目的方法:

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *xmlPath = [path stringByAppendingPathComponent:@"periodic.xml"]; 
NSString *xmlString = [NSString stringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:nil]; 

它加載XML,但它僅僅是純文本,無論如何,應該工作爲你

+0

我給你建議的修改,但仍然沒有運氣= /輸出看起來是這樣的: 路徑:/用戶/迪迪/文件/程序/ EpGuides /的thelist/EpGuides /構建/調試 xmlpath中:/Users/Didier/Documents/Programming/EpGuides/theList/EpGuides/build/Debug/allshows.txt 的xmlString:(空) 我甚至把拷貝到該debug文件夾看如果這會有所幫助,似乎沒有任何改變了:( – Didier

0

確保你已經在目標中包含該文件。僅僅在程序中擁有它是不夠的。具體而言,在該目標的構建步驟中,確保將其複製到輸出目錄,該目錄可能不是您認爲正在執行的目錄。 (人們常犯的錯誤是看他們的項目在哪裏,或者在'release'bin文件夾中而不是調試中,反之亦然(如果你真的把它添加到步驟中,請確保你知道它獲取覆蓋每次編譯和構建。)

0

你得到null回從pathForResource調用的原因是因爲在該名稱匹配的包沒有文件。

只是因爲它是在文件系統旁邊的源文件,並不意味着它將被複制到.app軟件包中。

檢查目標的構建設置中的「複製軟件包資源」步驟,並確保文件已列出在那裏。

+0

我不認爲這是開始,所以我增加了一個新的副本束資源階段,並添加了文件,但同樣存在類似的情況,這是是我的文件樹看起來像是否有幫助: http://didierd.co.uk/CBR.png – Didier

+0

'[[NSBundle mainBundle] bundlePath]'給了你什麼?這個目錄裏面有什麼? –

+0

謝謝兄弟!設法得到這個工作!只需要弄清楚如何在數組中打印出一個元素(例如,在[java]中的行[line] [line] [1]等等,但是我注意到了,因爲目標C中的情況不是這樣)?你爲你所有的幫助隊友! – Didier

0

正如我所提到的,文件「allshows.txt」與 「Epguides.m」(主目錄)在同一個目錄中。

當你說「主目錄」,你的意思是你的應用程序包或它正在編譯的目錄?

這導致我相信後者,在這種情況下,你正在使用NSBundle不正確。 NSBundle將找到你的應用程序包中的文件,而不是你的編譯目錄中的文件。

爲了添加一些東西到您的應用程序捆綁請按照下列步驟。 1.將項目拖到組目錄「支持文件」中的Xcode Project(本例中爲allshows.txt)(您不需要將其添加到該目錄中,但是您可能會在該目錄中添加它)。 2.選擇左側的項目並轉到構建階段選項卡。 3.如果您的文件尚未在「複製軟件包資源」中,只需通過拖放添加即可。

這樣做了以後,你應該能夠做到你想要做什麼。

PS。如果我在編譯目錄和應用程序包的假設上錯了。 嘗試將@「」傳遞給ofType:,該類型只是提示NSBundle以便快速查找。