I am trying to store a custom objects as follows, but I am getting an error.
// store data
NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:pOrderElements.count];
for (id orderObject in pOrderElements) {
NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:orderObject];
[archiveArray addObject:personEncodedObject];
}
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:@"personDataArray"];
// retrive data
NSData *data = [userData objectForKey:@"personDataArray"];
// the following line throws an error
id retrieveData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
here is my pOrderElements
(lldb) po pOrderElements
<__NSArrayM 0x174256b90>(
{
category = 1;
imagePath = "products/chicken-kabob.png";
name = "Baked Chicken";
price = "5.49";
}
)
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray bytes]: unrecognized selector sent to instance 0x174264f40'
First you create custom class Like below.
CustomObject.h
CustomObject.m
Then create
CustomObject
class object and store inNSUserDefaults
Stored your object like this
get custom object from
NSUserDefaults
like thisYou unarchive incorrect object. You store NSArray to NSUserDefaults