As you are saving the custom model object data to user default so you need to implement the encodeWithCoder
and initWithCoder
method in your custom object. Similarly while saving use archivedDataWithRootObject
and while fetching use unarchiveObjectWithData
.
Just put this two method (encodeWithCoder
and initWithCoder
) in your MyCart.m
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.ProdCode forKey:@"ProdCode"];
[encoder encodeObject:self.ProdName forKey:@"ProdName"];
[encoder encodeObject:self.Price forKey:@"Price"];
[encoder encodeObject:self.Quantity forKey:@"Quantity"];
[encoder encodeObject:self.ImageName forKey:@"ImageName"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.ProdCode = [decoder decodeObjectForKey:@"ProdCode"];
self.ProdName = [decoder decodeObjectForKey:@"ProdName"];
self.Price = [decoder decodeObjectForKey:@"Price"];
self.Quantity = [decoder decodeObjectForKey:@"Quantity"];
self.ImageName = [decoder decodeObjectForKey:@"ImageName"];
}
return self;
}
And then following code will show how to save and fetch the data from NSUserDefault
My Code To Save :
- (void)saveCart
{
MyCart *cart = [[MyCart alloc]init];
cart.ProdCode = @"123";
cart.ProdName = @"Name";
cart.Price = [NSString stringWithFormat:@"%f",100.0];
cart.Quantity = @"20";
cart.ImageName = @"image url";
NSArray *arrayTemp = [[NSUserDefaults standardUserDefaults] objectForKey:@"cart"];
// You can not use the arrayTemp to add object as the return type from `NSUserDefault` is `NSArray` which is immutable, so use another mutable array and add the object like this
NSMutableArray *array = [NSMutableArray array];
if([arrayTemp count])
{
[array addObjectsFromArray:arrayTemp];
}
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:cart];
[array addObject:encodedObject];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"cart"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
My Code To Fetch :
- (void)getCart
{
NSMutableArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"cart"];
for (NSData *encodedObject in array) {
MyCart *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
NSLog(@"cart ImageName %@", object.ImageName);
}
}
Hope it helps.
Happy coding ...