PFQuery *Location = [PFQuery queryWithClassName:@"Location"];
[Location findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"%@", [objects objectAtIndex:0]);
}];
如何将此对象存储在 NSUserDefaults 中?
PFQuery *Location = [PFQuery queryWithClassName:@"Location"];
[Location findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"%@", [objects objectAtIndex:0]);
}];
如何将此对象存储在 NSUserDefaults 中?
为了存储自定义对象,您需要在自定义对象类的 m 文件中添加这两个方法
-(void)encodeWithCoder:(NSCoder *)encoder
{
//Encode the properties of the object
[encoder encodeObject:self.contact_fname forKey:@"contact_fname"];
[encoder encodeObject:self.contact_lname forKey:@"contact_lname"];
[encoder encodeObject:self.contact_image forKey:@"contact_image"];
[encoder encodeObject:self.contact_phone_number forKey:@"contact_phone_number"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if ( self != nil )
{
//decode the properties
self.contact_fname = [decoder decodeObjectForKey:@"contact_fname"];
self.contact_lname = [decoder decodeObjectForKey:@"contact_lname"];
self.contact_image = [decoder decodeObjectForKey:@"contact_image"];
self.contact_phone_number = [decoder decodeObjectForKey:@"contact_phone_number"];
}
return self;
}
然后
-(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName withArray:(NSMutableArray *)myArray
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[defaults setObject:data forKey:keyName];
[defaults synchronize];
}
-(NSArray *)readArrayWithCustomObjFromUserDefaults:(NSString*)keyName
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:keyName];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[defaults synchronize];
return myArray;
}
使用这些函数来存储和读取自定义对象数组,或者你可以简单地使用这个库https://github.com/roomorama/RMMapper
可以在Apple 文档页面user defaults
中详细说明的对象类型存在限制:
value 参数只能是属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。对于 NSArray 和 NSDictionary 对象,它们的内容必须是属性列表对象。请参阅什么是属性列表?在属性列表编程指南中。
您需要将对象数组转换为字典数组,实现此目的的方法之一是实现一个toDictionary
方法,该方法将获取所有属性并将它们放入字典中。
您还需要 reverse 方法,initWithDictionary:
如果您还想从用户默认值重新创建对象(不过,如果需要,您可以使用转换后的字典)。
一旦有了转换方法,就可以使用NSUserDefaults方法来存储和检索对象。