NSKeyedArchiver archivedDataWithRootObject:不更新对象吗?

时间:2015-12-24 05:12:37

标签: objective-c nsuserdefaults nsdata nskeyedarchiver nskeyedunarchiver

我已经跟踪了其他一些线程并使用NSUserDefaults协议成功地将自定义对象保存/加载到NSCoding。但是,奇怪的是:我无法更新对象。

以下是一些代码块(注意:XUtil objectForKey:setObject:forKey:只是从NSUserDefaults执行加载/保存)

// First, load the object.
+ (id)loadCustomObject 
{
    NSData *encodedObject = [XUtil objectForKey:@"customObject"];
    return encodedObject ? [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject] : nil;
}

接下来,执行更新其属性,然后:

// Finally, re-encode and save.
- (void)saveToDefault
{
    NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:self];
    [XUtil setObject:encodedObject forKey:@"customObject"];
}

经过几次尝试后,我发现KeyArchiver

有些不对劲
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:(NSStringFromSelector(@selector(name))];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    self.name = [aDecoder decodeObjectforKey:(NSStringFromSelector(@selector(name))];
    return self;
}

首先,加载对象,精细(name = @"ObjectName")。更新属性(self.name = @"New Name")。致电[self saveToDefault]

我将archivedDataWithRootObject:self之后的调试放在第二个块中:

po [[NSKeyedUnarchiver unarchiveObjectWithData:encodeObject] name]
-> old values

因此keyArchiver不会更新属性,但我不确定下一步该做什么。

EDIT5

经过一天,尝试了各种可能的方法,我变得非常绝望,并将整个NSCoder对象转换为NSDictionary并毫无困难地保存。无论如何,使用这个“将自定义对象保存到NSUserDefault”有什么意义....人们,请告诉我这个问题。

0 个答案:

没有答案