2011-05-27 87 views
0

崩潰我正在使用一個相當簡單的方法在文本文件中存儲文件名。出於某種原因,當我開始將writeToFile我得到一個崩潰:writeToFile

pathString = [NSString stringWithFormat:@"New FileName - %@.png", identifier]; 
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 
NSString *newContents = [NSString stringWithFormat:@"%@:::%@",currentContents, pathString]; 
NSData *newData = [newContents dataUsingEncoding:NSUTF8StringEncoding]; 
[newData writeToFile:saveFilePath options:NSDataWritingAtomic error:nil]; 

它讀取文件,它的內容放到一個名爲currentContents變量,然後增加新的字符串的文件,並重新寫它。這裏出了什麼問題。

沒有writeToFile行它的工作,與它,我得到一個崩潰。

SAVEFILEPATH

原產
NSString *saveDocument = [NSString stringWithFormat:@"SavedFile.txt"]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
saveFilePath = [docsDirectory stringByAppendingPathComponent:saveDocument]; 

SAVEFILEPATH的NSLog的揭示了一個正確的路徑

+1

你應該使用' - [NSData的writeToURL:選項:error:]',因爲Apple在處理文件路徑時建議在'NSString'對象上使用'NSURL'對象。順便說一句,你在第一行有語法錯誤。 – 2011-05-27 14:54:17

+0

啊,你指的是逗號,這是在匿名過程中完成的,我原來的代碼有逗號。對,我會嘗試NSURL而不是NSString – 2011-05-27 15:02:36

+1

錯誤:無應該是錯誤:NULL – onnoweb 2011-05-27 15:03:02

回答

0

事實證明,該文件沒有寫的原因是因爲未分配的變量:

NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 

應該是:

NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 
1

我認爲你的問題實際上可能是在你的NSData對象的末尾缺少空字符('\0')。所以你最終會弄亂數據。無論如何,您可能想立即在新字符串上使用-writeToFile:atomically:encoding:error: