Iam trying to save NSMutableDictionary to NSUserDefaults with this code:
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *repositoryData = [[NSMutableDictionary alloc] init];
[repositoryData setObject:personData forKey:@"persondata"];
[def setObject:repositoryData forKey:@"kUserRepository"];
[def synchronize];
[repositoryData removeAllObjects];
[repositoryData release];
But i am getting this msg:
[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{
persondata = "<Person: 0x1ed57e70>";
}' of class '__NSDictionaryM'. Note that dictionaries and arrays in property lists must also contain only property values.
and also the Person Class have NSCoding:
Person.h
@interface Person : NSObject <NSCoding> {
NSString *name;
NSString *email;
NSString *phoneNumber;
NSString *gender;
int age;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *phoneNumber;
@property (nonatomic, retain) NSString *gender;
@property (assign) int age;
@end
Person.m
@implementation Person
@synthesize name,email,phoneNumber,age,gender;
#pragma mark
#pragma mark NSCoder
- (void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.name forKey:@"username"];
[encoder encodeObject:self.email forKey:@"useremail"];
[encoder encodeObject:self.phoneNumber forKey:@"userphonenumber"];
[encoder encodeObject:self.gender forKey:@"usergender"];
[encoder encodeInt:self.age forKey:@"userage"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if(self = [super init]){
self.name = [decoder decodeObjectForKey:@"username"];
self.email = [decoder decodeObjectForKey:@"useremail"];
self.phoneNumber = [decoder decodeObjectForKey:@"userphonenumber"];
self.gender = [decoder decodeObjectForKey:@"usergender"];
self.age = [decoder decodeIntForKey:@"userage"];
}
return self;
}
@end
Any idea why it happen?
There are very specific restrictions as to what type of data can be synced to
NSUserDefaultswithin anNSDictionary. These includeNSString, NSNumber, NSData, NSArray and NSDictionary. Use yourNSCodermethods to serialize toNSData(usingNSKeyedArchiver) before storing in theNSUserDefaults.Also, take a look at this