2013-04-21 54 views
0

我的項目中有一個名爲a00.PGN的PGN文件,我想解析它以便將其預加載到Core Data中。現在,我作爲使用如何在目標中讀取PGN文件進行解析 - c

NSError *err = nil; 
    NSString *datapath = [[NSBundle mainBundle] pathForResource:@"a00" ofType:@"PGN"]; 
    NSString *content = [NSString stringWithContentsOfFile:datapath encoding:NSASCIIStringEncoding error:&err]; 
    NSLog(@"%@", err); 

NSLog字符串只是想輸出文件,我得到一個錯誤:錯誤域= NSCocoaErrorDomain代碼= 258「文件名是無效的。」

當我NSLog的字符串內容是NULL。

我曾嘗試將擴展名更改爲.txt,但收到同樣的錯誤,並且還使用了NSUTF8StringEncoding。閱讀這個文件以解析objective-c的最佳方式是什麼?

編輯1:

要在自己的項目文件我拖着從取景器。然後我轉到我的項目目標,並將其添加到Copy Files部分,並將產品目錄作爲目標。子路徑是空的。

編輯2:

我已經上傳了這個簡單的項目的當前狀態,以回購在這裏:https://github.com/justinjdickow/PGN-Parse-into-Core-Data/

+0

只存儲要存儲在Core Data中的映像的路徑要快得多。否則你的數據庫將會變得非常快!您可以像iPhoto或Aperture那樣爲您的圖像創建一個「容器」。 – HAS 2013-04-21 20:21:14

+0

它是一個圖像或只是一個非標準文件擴展名? – Mundi 2013-04-21 20:25:09

+0

這只是一個非標準的文件擴展名。這是一個我可以用任何文本編輯器閱讀的文本文件。這不是一個圖像。 – JuJoDi 2013-04-21 20:34:03

回答

2

根據Technical Q&A QA1436: What is the "main bundle" of a command-line foundation tool? - 實際上,該文件是(部分)錯誤的。

在命令行工具可執行文件中,主包的路徑將是包含可執行文件本身的目錄。例如,在一個示例命令行工具項目,我在這裏做,下面是登錄到控制檯:

mainBundle == NSBundle <~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug> (loaded), 
bundlePath == ~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug 

換句話說,主束將是您內置的產品目錄。要使NSBundlepathForResource:ofType:能夠在運行時找到「A00.PGN」文件,該文件需要與您的可執行文件一起位於您的內置產品目錄中。例如,在我的情況下,我需要該文件位於~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug/A00.PGN

最簡單的方法是將Copy Files構建階段添加到命令行工具目標中。將目標指定爲產品目錄,並將A00.PGN文件包含在要複製的文件列表中。

另外,正如其他人已經提到的那樣,NSBundle的搜索方法是區分大小寫的,即使OS X上的基礎HFS +文件系統僅僅是保留情況。因此,請確保在代碼中指定了正確的文件名和文件擴展名。

+0

這些信息包含在我所關注的教程中,所以我已經完成了。其中包含a00.PGN文件,其中包含自動輸入的「產品目錄」和子路徑「usr/share/man/man1」的目的地。我也確保我的字符串與文件名相匹配。我如何確認產品目錄的子路徑?還有什麼可能導致這個錯誤? – JuJoDi 2013-04-22 01:46:25

+1

您應該刪除子路徑條目。這可能有從默認的「複製文件」,這是爲了「人頁」(文檔幫助文件)爲您的工具到相應的位置複製生成階段。既然你重用你的目的是相同的階段,你應該刪除子路徑項,否則將被複制到'... /編譯/產品/調試的/ usr/share/man中/男1/a00.PGN'代替'.../Build/Products/Debug/a00.PGN'。或者,您可以創建2個獨立的複製文件階段,並將各個文件複製到每個文件的相應位置。 – NSGod 2013-04-22 07:41:07

+0

我刪除了路徑,仍然收到相同的錯誤。我也嘗試使Subpath與包含在我的數據路徑字符串中的路徑相同。 – JuJoDi 2013-04-22 16:22:48

0

注意pathForResource:ofType:具有取決於它是否是iPhone模擬器或iPad模擬器或不同的大小寫裝置。

確保您始終使用大寫/小寫。

+0

這是一個在xcode中構建的Objective-C命令行工具,雖然我嘗試過將實際文件的大小寫匹配到一起也無濟於事。 – JuJoDi 2013-04-21 20:34:51