我有一个 NSData 对象由 NSArchiver 在 OSX 中存档,它是一个 NSAttributedString。现在我想在 iOS 中取消归档它,但 iOS 没有 NSUarchiver,它只有 NSKeyedUnarchiver,它不适合这个工作。
甚至可以解码数据吗?我想自己实现 NSUNarchiver 但我想如何找出 NSData 中的那些神奇字节?
当然 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];
希望这可以帮助!