-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);

它只是打印(空)。(当他们在一次运行中一个接一个地执行时,它反序列化就好了)

我很感激帮助。

4

1 回答 1

0

问题是你在哪里写你的文件?因为您不允许在 iOS 中在整个系统中写入文件。

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

文档目录通常是您可以写入文件的地方,因此您可能想尝试一下。

于 2012-07-07T14:38:04.683 回答