【发布时间】:2014-01-08 10:47:52
【问题描述】:
我正在尝试从 NSUserdefaults 解码我的对象。 如果我调试函数initWithCoder,它执行得很好,但是当我查看我被解码的对象时,所有属性都是nil。
我的 initWithCoder 函数:
-(id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if ( self != nil )
{
//decode the properties
self.SGTIN = [decoder decodeObjectForKey:@"SGTIN"];
self.GTIN = [decoder decodeObjectForKey:@"GTIN"];
self.SerialNumber = [decoder decodeObjectForKey:@"SerialNumber"];
self.Product = [decoder decodeObjectForKey:@"Product"];
self.DateTimeScanned = [decoder decodeObjectForKey:@"DateTimeScanned"];
self.Loaded = [decoder decodeBoolForKey:@"Loaded"];
}
return self;
}
我解码对象的代码: NSDictionary *tempDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
NSArray *tempArray =[tempDictionary allKeys];
for (NSString *key in tempArray){
if ([key length] > 8) {
if ([[key substringToIndex:8] isEqualToString:@"INXITEM:"]) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:key];
ScannedItem *SITemp = (ScannedItem *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
}
}
}
刚刚找到...
这是因为属性 Loaded (bool) 是一个新属性,而保存在 NSUserDefaults 中的对象不包含该属性。
清除了我的 NSUserDefaults,现在一切正常...
【问题讨论】:
-
ScannedItem的超类是什么。您何时以及如何对实例进行编码?您是否正确实现了编码?
标签: ios nsuserdefaults nscoding