我有一个NSData对象由NSArchiver在OSX中存档,它是一个NSAttributedString。现在我想在iOS中取消归档,但iOS没有NSUnarchiver,它只有NSKeyedUnarchiver,不适合这项工作。
甚至可以解码数据吗?我想自己实现NSUnarchiver,但我想如何在NSData中找出那些神奇的字节?
答案 0 :(得分:1)
当然,iOS同时拥有NSKeyedUnarchiver和NSKeyedArchiver。如果他们提供了没有归档者的归档者,那将毫无意义。
假设您的NSData属性或变量的名称是myData,以下是对它们进行编码和解码的方法:
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:myData forKey:@"myData"];
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
[self setMyData:[aDecoder decodeObjectForKey:@"myData"]];
}
return self;
}
然后你可以创建一个文件路径来保存它:
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
cachePath = [cachePath stringByAppendingPathComponent:@"Store.archive"];
现在,您需要确定程序中的归档和取消归档数据的位置。在那里你可以使用以下内容:
取档:
ClassName *cachedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:cachePath];
归档:
[NSKeyedArchiver archiveRootObject:theObjectYourWantToArchive toFile:cachePath];
希望这有帮助!