2013-05-04 24 views
2

我想加載到NSString,我的文件的內容名爲names.txt,在項目的目錄中。要做到這一點,我有以下代碼:NSString -initWithContentOfFile錯誤 - Objective-C

NSError *error = nil; 
    NSString *names = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"] encoding:NSASCIIStringEncoding error:&error]; 
    if (error != nil) { 
     [NSException raise:@"Error reading file :" format:@"%@",error]; 
    } 

而我越來越*** Terminating app due to uncaught exception 'Error reading file :', reason: 'Error Domain=NSCocoaErrorDomain Code=258 "The file name is invalid."'。我找不到任何其他類似的情況。這段代碼有什麼問題?

+0

'pathForResource:ofType:'找不到該文件並返回'nil'。 – 2013-05-04 19:56:13

+0

你確定擴展名是'txt'嗎?您是否在'Finder'中右鍵單擊了該文件,單擊「獲取信息」並在「名稱和擴展名」下檢查了該擴展名? – HAS 2013-05-04 19:57:09

+0

我敢肯定,這個文件的名字是'names',它的擴展名是'txt' – user2331955 2013-05-04 20:07:32

回答

4

確保您的names.txt文件包含在您的目標的Xcode Build Phases窗口的Copy Bundle Resources區域下。

在調試器,你可以測試一個有效的包文件用:

... 
    NSString *file = [[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"]; 
    /* FILE ought not be nil. NSAssert (file) */ 
    NSString *names = [[NSString alloc] initWithContentsOfFile: file 
                encoding: NSASCIIStringEncoding 
                 error: &error]; 
+1

當我登錄'file'時,得到'(null)',文件位於主文件夾下的Xcode項目中...... – user2331955 2013-05-04 20:06:02

+0

這意味着該文件不是應用程序包的一部分。該文件需要列在'Copy Bundle Resources'下;在那裏檢查。如果您將names.txt放入「支持文件」組中,那麼它很可能會自動添加到「複製包資源」 – GoZoner 2013-05-04 20:10:11

+0

我已將它放在支持文件下並且仍然是相同的錯誤。 – user2331955 2013-05-04 20:12:41

2
if (error != nil) { 

無無無無無。這不是正確的測試。該測試是

if (nil == names) { 

error值告訴你什麼我們是否成功。這是返回的零值,告訴你是否有問題。然後,只有這樣,您纔可以閱讀錯誤。

+0

好吧,感謝您的更正,但並沒有解決我的問題... – user2331955 2013-05-04 20:10:21

+0

我知道。但我無法忍受看到你做錯了這件事,它會讓你陷入嚴重的困境。 – matt 2013-05-04 20:33:59

+1

所以,僅僅爲了解這個,是否有可能錯誤不是零,並且字符串已經成功生成了? – user2331955 2013-05-04 20:36:51