Ios 将NSArray保存到NSUserDefaults问题(使用数组中的自定义对象)
我尝试将对象保存到Ios 将NSArray保存到NSUserDefaults问题(使用数组中的自定义对象),ios,nsuserdefaults,Ios,Nsuserdefaults,我尝试将对象保存到NSUserDefaults。但是当我再次调用这个方法时,它并没有关于以前操作的任何信息 我的方法如下: - (void)addToCart { if([[NSUserDefaults standardUserDefaults] objectForKey:kCart]) { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSMutableArray *prod
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并保存它,但它不起作用。您需要遵守
协议,并在自定义对象中实现-initWithCoder:
和-encodeWithCoder:
请参阅:您需要遵守
协议,并在自定义对象中实现-initWithCoder:
和-encodeWithCoder:
请参阅:放入
nsserdefaults
的所有内容必须是有效的属性列表对象(NSData
,NSString
,NSNumber
,NSDate
,NSArray
或NSDictionary
)。所有集合元素本身也必须是属性列表对象
为了将非PL对象保存到NSUserDefaults
,必须首先将该对象转换为PL对象。最通用的方法是将其序列化为NSData
序列化到NSData
由NSKeyedArchiver
处理。有关这方面的规范示例,请参见。(该文档非常旧,仍然引用了NSArchiver
,它可以很好地解决此问题,但是NSKeyedArchiver
现在是首选的序列化程序。)
为了使用
NSKeyedArchiver
进行归档,您的对象必须符合@harakiri所述的NSCoding
。放入NSUserDefaults
的所有内容都必须是有效的属性列表对象(NSData
,NSString
,NSNumber
,NSDate
,NSArray
,或NSDictionary
)。所有集合元素本身也必须是属性列表对象
要将非PL对象保存到NSUserDefaults
,必须首先将该对象转换为PL对象。最常用的方法是将其序列化为NSData
使用NSKeyedArchiver
处理序列化到NSData
的操作。有关此操作的规范示例,请参阅。(该文档非常旧,仍然引用了NSArchiver
,这对解决此问题很有效,但NSKeyedArchiver
现在是首选序列化程序。)
为了使用NSKeyedArchiver
进行归档,您的对象必须符合@harakiri所述的NSCoding