我尝试将对象保存到NSUserDefaults
。但是当我再次调用此方法时,它没有任何关于先前操作的信息。
我的方法如下:
- (void)addToCart {
if([[NSUserDefaults standardUserDefaults] objectForKey:kCart]) {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *products = [[NSMutableArray alloc] initWithArray:[prefs objectForKey:kCart]];
[products addObject:self.product];
[prefs setObject:products forKey:kCart];
[prefs synchronize];
[products release];
}
else {
//Saving...
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:[NSArray arrayWithObjects:self.product, nil] forKey:kCart];
[prefs synchronize];
}
}
我需要将带有产品的集合保存到NSUserDefault。我将我的对象包装到NSArray并保存但它不起作用。
答案 0 :(得分:2)
您需要符合<NSCoding>
协议,并在自定义对象中实施-initWithCoder:
和-encodeWithCoder:
。
答案 1 :(得分:2)
放入NSUserDefaults
的所有内容必须是有效的属性列表对象(NSData
,NSString
,NSNumber
,NSDate
,NSArray
或NSDictionary
)。所有集合元素本身也必须是属性列表对象。
为了将非PL对象保存到NSUserDefaults
,必须先将对象转换为PL对象。最通用的方法是将其序列化为NSData
。
使用NSData
处理序列化为NSKeyedArchiver
。有关此规范示例,请参阅Storing NSColor in User Defaults。 (该文档非常陈旧,仍然引用NSArchiver
,可以解决此问题,但NSKeyedArchiver
现在是首选的序列化程序。)
要使用NSKeyedArchiver
进行存档,您的对象必须符合@harakiri所述的NSCoding
。