如何将自定义对象保存到包含UIImage和NSMutableArray的NSUserDefault?
问题描述:
在我的项目中,我需要保存一个具有UIImage,NSMutableArray和NSString对象的自定义对象(Person)。目前我能够对NSString对象进行编码和解码,并将Person存档到NSUserDefault中。除UIImage和NSArray外,一切正常。如何将自定义对象保存到包含UIImage和NSMutableArray的NSUserDefault?
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.userName = [aDecoder decodeObjectForKey:@"userName"]; //NSString
self.profileImage = [aDecoder decodeObjectForKey:@"profileImage"]; //UIImage
self.uplodedVideoArray = [aDecoder decodeObjectForKey:@"uplodedVideoArray"]; //NSMutableArray
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.userName forKey:@"userName"]; //NSString
[aCoder encodeObject:self.profileImage forKey:@"profileImage"]; //UIImage
[aCoder encodeObject:self.uplodedVideoArray forKey:@"uplodedVideoArray"]; //NSMutableArray
}
-(void)archivePerson
{
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:[Person sharedInstance]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:encodedObject forKey:@"Person"];
[defaults synchronize];
}
-(Person *)unarchivePerson
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:@"Person"];
Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return person;
}
答
您只能将某些类型的对象存储到NSUserDefaults中,这些对象可以写入到plist文件中。 (请看这里https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html) 所以你不能在那里存储图像。你遇到数组问题的原因是集合(数组/字典)只有在兼容plist的对象时才兼容。最好的办法是分别保存图像/视频文件,然后将URL(如String/NSString)写入NSUserDefaults。最好的
其实,保存UIImage不是我关心的问题。我想将自定义对象保存到NSUserDefault。事实上,我做到了。所有NSString属性的行为都如预期的那样,但是当我取消存档自定义对象时,我无法获取图像。 – Rokon