iOS中的NSUnarchiver

时间:2013-05-04 23:19:31

标签: ios macos

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

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

1 个答案:

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

希望这有帮助!