Iphone archiveRootObject:toFile:文件看起来像胡言乱语

Iphone archiveRootObject:toFile:文件看起来像胡言乱语,iphone,nsfilemanager,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 arch

我正在尝试将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];
然而,当我查看磁盘上的文件时,它是一堆胡言乱语。我做错什么了吗?或者我是否理解ArchiverootoObject:toFile:如何不正确地工作?谢谢。

步骤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];
NSFileManager * fm = [NSFileManager defaultManager];
NSURL * docsURL =[fm URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
步骤3: 如果要将数据保存到.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];
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]

就是这样,您的代码应该可以正常工作,将数据存储到文件中,并在您请求时检索数据


希望这能解决问题

您不能直接检查文件,因为它是以二进制格式编写的。你必须把它装回去才能读


请参阅中的讨论。

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

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