0

我正在尝试将我的 NSMutableArray 写入文本文件。我在写之前用NSLog查看了数据,它是我想要的格式

String \t integer \t integer \t integer \r\n
String \t integer \t integer \t integer \r\n
... (50 lines like this)
String \t integer \t integer \t integer \r\n

我通过以下方式编写文件:

[NSKeyedArchiver archiveRootObject:myMutableArray toFile:newPath];

然而,当我查看磁盘上的文件时,它是一堆乱码。我在这里做错了吗?或者我是否理解 archiveRootObject:toFile: 工作不正确?谢谢。

4

3 回答 3

0

第 1 步:如果使用自定义对象(例如类对象),则

-(id) initWithCoder:(NSCoder *)aDecoder

-(void) encodeWithCoder:(NSCoder *)aCoder

自定义类中的方法,并且必须使用 NSCoding 协议

第 2 步:为了从 .bin 文件中检索数据

NSFileManager * fm = [NSFileManager defaultManager];
NSURL * docsURL =[fm URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
// this will create the file yourFile.bin if it is not present    
NSString * path = [[docsURL path]stringByAppendingString:@"/yourFile.bin"];

self.yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:self.path];

第 3 步:如果要将数据保存到 .bin 文件中

NSFileManager * fm = [NSFileManager defaultManager];
NSURL * docsURL =[fm URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

这将使用您的文件(如果存在),否则它将创建它

NSString * path = [[docsURL path]stringByAppendingString:@"/yourFile.bin"];

[NSKeyedArchiver archiveRootObject:self.recordedPlayers toFile:self.path]

就是这样,您的代码应该通过将数据存储到文件中并在您要求时检索它来正常工作......

希望这能解决问题

于 2012-05-14T22:59:31.553 回答
0

您无法直接检查文件,因为它是以二进制格式编写的。您必须重新加载它才能阅读它。

请参阅文档中的讨论。

于 2012-05-14T23:08:56.193 回答
0

正如其他人所指出的,该文件以二进制格式编写。

但是,您可以检查它 - 它是一个二进制 plist,因此只需将其命名(或在 Finder 中重命名)为.plist扩展名并使用 Xcode 打开即可显示密钥存档的内容。键的组织不是很明显,但如果你正在寻找一个特定的值,你通常可以很容易地找到/编辑它:

Xcode plist 编辑器的屏幕截图

于 2012-10-05T16:06:03.087 回答