在NSUserDefaults中保存继承的对象

时间:2018-02-27 10:16:54

标签: ios objective-c iphone nsuserdefaults

我正在使用一个继承自NSObject的类'userDC'。此对象正确保存在用户默认值中,没有任何问题 但是现在我又创建了一个继承自userDC的类,名为'appUserDC' 当我尝试在appUserDC中保存数据时,它的父对象正在保存,但是当我尝试将其保存在存档中并尝试将其检索回来时,它不会返回任何保存在userDC属性中的数据。

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

使用NSCopying协议方法创建对象类时 - initWithCoder:encodeWithCoder:

从要保存对象的类 - archivedDataWithRootObject NSKeyedArchiver方法中,这将返回Data对象。

在检索对象后,您必须取消归档unarchiveObjectWithData的{​​{1}}方法。

目标C示例 -

班级NSKeyedUnarchiver

在实现.m文件 -

AppuserDC

保存对象时 -

- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:self.myProperty forKey:@"myProperty"];
}

- (id)initWithCoder:(NSCoder *)decoder
{
    if((self = [super initWithCoder:decoder]))
    {
        self. myProperty = [decoder decodeObjectForKey:@"myProperty"];
    }
    return self;
}

检索对象 -

- (void)saveMyObject:(AppuserDC *)user
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:user];
    [defaults setObject:myEncodedObject forKey:@"user"];
    [defaults synchronize];
}