archiveRootObject:toFile:文件看起来像乱码

时间:2012-05-14 19:48:01

标签: iphone nsfilemanager

我正在尝试将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:如何正常工作?感谢。

3 个答案:

答案 0 :(得分: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]

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

希望这能解决问题

答案 1 :(得分:0)

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

请参阅documentation中的讨论。

答案 2 :(得分:0)

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

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

screenshot from Xcode plist editor

相关问题