我正在尝试使用NSUserDefaults存储整数和NSArray,但我只能正确检索整数。当我尝试恢复NSArray时,它返回一个空数组。
我从自定义类XMLParser.m开始。
// XMLParser.m
//NSArray 'stored' correctly contains 10 data objects. 'stored' is an NSArray property of the XMLParser class
numberOfEvents = [stored count];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:stored forKey:@"eventsList"];
[defaults setInteger:numberOfEvents forKey:@"numberOfEvents"];
[defaults synchronize];
但是当我尝试访问另一个类中的数据时,即。我的AppDelegate,我得到一个空的NSArray
//myApplicationAppDelegate.m
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int value = [defaults integerForKey:@"numberOfEvents"]; //returns 10
parsedEventsList = [defaults arrayForKey:@"eventsList"]; //parsedEventsList is an NSArray property of myApplicationAppDelegate class
int value2 = [parsedEventsList count]; //***returns 0***
我甚至尝试过使用
[defaults objectForKey:@"eventsList"]
它仍然没有返回。
思考?谢谢!
答案 0 :(得分:1)
stored
数组中的所有对象必须是属性列表对象(即NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary的实例)。
答案 1 :(得分:0)
您的问题似乎是您的对象都是自定义的。 我想如果你添加类似于此的代码(对于你的每个对象),你可能忘记了使它们可序列化,那么它应该可以工作
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.obj1 forKey:@"obj1"];
[encoder encodeObject:self.obj2 forKey:@"obj2"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.obj1 = [decoder decodeObjectForKey:@"obj1"];
self.obj2 = [decoder decodeObjectForKey:@"obj2"];
}
return self;
}