如何直接在NsuserDefault中存储解析对象?

时间:2015-05-15 11:19:55

标签: ios objective-c parse-platform pfobject

PFQuery *Location = [PFQuery queryWithClassName:@"Location"];
[Location findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {      
  NSLog(@"%@", [objects objectAtIndex:0]);             
}];

如何在NSUserDefaults中存储此对象?

2 个答案:

答案 0 :(得分:0)

要存储自定义对象,您需要在自定义对象类的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

答案 1 :(得分:0)

user defaults中可存储的对象类型存在限制,详细信息请参见Apple documentation page

  

value参数只能是属性列表对象:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。对于NSArray和NSDictionary对象,其内容必须是属性列表对象。见What is a Property List?在Property List Programming Guide

您需要将对象数组转换为字典数组,其中一种方法是实现一个toDictionary方法,该方法将获取所有属性并将它们放入字典中。

如果您还想从用户默认值中重新创建对象,您还需要反向方法initWithDictionary:(如果您愿意,可以使用已转换的词典) )。

获得转换方法后,可以使用NSUserDefaults方法存储和检索对象。

相关问题