-1

明白な質問で申し訳ありませんが、ファイルにデータを書き込むときに注意すべき点はありますか?プログラムは、プログラムの実行中に書き込んだばかりのデータを読み取ることができますが、プログラムを停止した瞬間に、ファイルが空になる

データを書き込んで後でファイルを閉じるために、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回の実行で次々に実行すると、正常にシリアル化解除されます)

助けてくれてありがとう。

4

1 に答える 1

0

問題は、ファイルをどこに書き込むかです。iOS では、システム全体にファイルを書き込むことは許可されていないためです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

ドキュメントディレクトリは通常、ファイルを書き込むことができる場所なので、試してみることをお勧めします。

于 2012-07-07T14:38:04.683 に答える