0

私はファイル名をテキストファイルに保存する非常に簡単な方法を使用しています。何らかの理由で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は、正しいパスを明らかにします

4

2 に答える 2

1

'\0'問題は、実際にはNSDataオブジェクトの最後にヌル文字( )がないことである可能性があります。したがって、最終的にデータが台無しになってしまいます。-writeToFile:atomically:encoding:error:とにかく、新しい文字列ですぐに使用することをお勧めします。

于 2011-06-17T12:30:59.567 に答える
0

ファイルが書き込まれなかった理由は、割り当てられていない変数が原因であることが判明しました。

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

になるはずだった:

NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
于 2011-06-27T12:27:07.737 に答える