明白な質問で申し訳ありませんが、ファイルにデータを書き込むときに注意すべき点はありますか?プログラムは、プログラムの実行中に書き込んだばかりのデータを読み取ることができますが、プログラムを停止した瞬間に、ファイルが空になる
データを書き込んで後でファイルを閉じるために、NSFileHandleを使用してみましたが、役に立ちませんでした...現在、私は使用しています:
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:newArray];
[encodedObject writeToFile:string atomically:YES];
そして、私が何をしても、最も単純な NSString をファイルに永久に残すことはできません
私は何をしますか?
@LetzFlowに感謝しますが、まだ解決していません。
今、私は使用しています:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
string = [NSString stringWithFormat:@"%d.rtf",fileName];
NSString *file = [documentsDirectory stringByAppendingPathComponent:string];
//NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:file];
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:newArray];
[encodedObject writeToFile:file atomically:YES];
//[fileHandle writeData:encodedObject];
//[fileHandle closeFile];
NSLog(@"%@",[NSString stringWithContentsOfFile:file encoding:NSStringEncodingConversionAllowLossy error:nil]);
オブジェクトの配列をシリアル化すると、NSLog は有効な配列を示します。それでも、後でファイルを見るか、配列のシリアル化を解除しようとすると(次のように):
NSString *stringX = [NSString stringWithFormat:@"%d.rtf",fileName];
NSData *encodedObjectX = [NSData dataWithContentsOfFile:stringX];
NSArray *newArrayX = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObjectX];
TurnigButton *button = [[newArrayX objectAtIndex:1] objectAtIndex:5];
NSLog(@"%d", button.idNum);
(null) を出力するだけです。(1回の実行で次々に実行すると、正常にシリアル化解除されます)
助けてくれてありがとう。