使用NSArray对象的NSUserDefaults NSObject

我试图在NSUserDefaults保存对象,在这个网站上经历了很多问题,但无法解决问题,我的NSObject有另一个对象的NSMutableArray 。 像这里主要的对象是HotelDC ,它有一个数组“features”一组FeactureDC对象。

这是我的代码:

- (id)initWithCoder:(NSCoder *)decoder {
self = [[HotelDC alloc] init];
if (self != nil) {

    self.hotel_id = [decoder decodeIntegerForKey:@"hotel_id"];
    self.name = [decoder decodeObjectForKey:@"name"];
    self.features = [decoder decodeObjectForKey:@"features"];

}
return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {

[encoder encodeInt:hotel_id forKey:@"hotel_id"];
[encoder encodeObject:name forKey:@"name"];
[encoder encodeObject:features forKey:@"features"];//its a mutable array
}

我应该如何保存它,并检索? 我遇到了错误

 Attempt to insert non-property value '<HotelDC: 0xa600fe0>' of class 'HotelDC'. 
 Note that dictionaries and arrays in property lists must also contain only property values.

解答:

//Setting
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:hotelObjSelected];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myEncodedObject forKey:@"selectHotelObject"];

[[NSUserDefaults standardUserDefaults] synchronize];

// retrieving
NSData *data = [defaults objectForKey:@"selectHotelObject"];
hotelObjSelected = [NSKeyedUnarchiver unarchiveObjectWithData:data];

NSUserDefaults由属性列表支持。 唉,proprety列表不能包含序列化对象。 从手册引用:

一个默认对象必须是一个属性列表,也就是一个实例(或集合的实例组合):NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。 如果你想存储任何其他类型的对象,你通常应该将其存档以创建一个NSData实例

您必须创建自己的序列化数据文件以直接保存对象,或者将对象作为允许的类型之一进行序列化。 NSUserDefaults是, NSUserDefaults不会调用encodeWithCoder - 它只是屏蔽传递给setObject:forKey:的对象类型。 最好的HotelDC自己将HotelDC的字段序列化,或将对象存档到NSData实例并存储它。


我通过以下方式完成了该操作。请检查它。 下面的代码是for循环。

 NSMutableArray *newEventArray = [[NSMutableArray alloc] init];
                    [newEventArray addObject:title];
                    [newEventArray addObject:alarmDate];

 NSArray *iCalAlarmArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"alarmList"];
                    if(iCalAlarmArray == nil || [iCalAlarmArray count] <= 0)
                    {
                        iCalAlarmArray = [[NSMutableArray alloc] init];
                    }

iCalAlarmArray = [iCalAlarmArray arrayByAddingObject:newEventArray];

[[NSUserDefaults standardUserDefaults] setObject:iCalAlarmArray forKey:@"alarmList"];

[[NSUserDefaults standardUserDefaults] synchronize];

愿这能帮助你。


您应该在FeatureDC中编写类似的编码和解码方法,并将其存储在数组中,然后在此进行编码。

链接地址: http://www.djcxy.com/p/69129.html

上一篇: NSUserDefaults NSObject with NSArray Object

下一篇: How should one start on creating a sbt plugin?