1

我有一个 NSData 对象由 NSArchiver 在 OSX 中存档,它是一个 NSAttributedString。现在我想在 iOS 中取消归档它,但 iOS 没有 NSUarchiver,它只有 NSKeyedUnarchiver,它不适合这个工作。

甚至可以解码数据吗?我想自己实现 NSUNarchiver 但我想如何找出 NSData 中的那些神奇字节?

4

1 回答 1

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];

希望这可以帮助!

于 2013-05-04T23:39:55.953 回答