2014-01-23 21 views
0

我試圖檢索到NSString的csv文件的內容。這就是我所做的:CSV到NSString結果爲空的空對象

NSString *strBundle = [[NSBundle mainBundle] pathForResource:@"socs" ofType:@"csv"]; 
NSLog(@"bundle path: %@",strBundle); 
NSString *file = [NSString stringWithContentsOfFile:strBundle 
                encoding:NSUTF8StringEncoding 
                error:nil]; 
    if ([[NSFileManager defaultManager]fileExistsAtPath:strBundle]) { 
     NSLog(@"file is there!!!"); 
    }else { 
     NSLog(@"no file"); 
    } 
    NSLog(@"file: %@",file); 
    NSArray *allLines = [file componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
    NSLog(@"lines: %lu",(unsigned long)[allLines count]); 

文件管理器顯示該文件在那裏。當我嘗試記錄NSString或文件數量時,它會顯示爲空。我甚至創建了NSData對象,其內容完全相同,當我記錄NSData對象時,我清楚地看到有一些數據。然後,當我嘗試創建帶有NSData內容的NSString時,我的結果與之前一樣 - null。也許問題出在格式化文件的某個地方?

任何幫助將不勝感激:)

+0

您的CSV文件有多大? – random

+3

你認爲你選擇忽略的錯誤信息是什麼? –

回答

2

我看到3個問題:

  1. 你傳遞一個nil參數傳遞給error:參數在stringWithContentsOfFile:線。如果有可能出現問題(顯然存在問題),那麼您應該在那裏通過一個真實的論證,以便您能夠找出問題所在。

  2. 您可以使用componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet],但有一種趨勢是在每行之間產生空白「組件」。幾乎在所有我遇到的情況下,普通舊@"\n"的效果更好。

  3. 您應該檢查fileExistsAtPath嘗試如果你是真正能夠創造從路徑的NSData對象將其加載到NSString

  4. 之前它並不一定意味着它是正確的數據。但是,讓我們假設,如果您無法將其轉換爲NSString,那麼您需要檢查編碼參數。

+0

好的,我不知道當我通過nil出錯時我在想什麼。格式化確實存在錯誤。什麼只是用textwrangler打開文件,並用utf-8格式保存。它解決了這個問題,很簡單:)你的帖子很有幫助,所以我將其標記爲已解決,謝謝:) – repoguy