NSUserDefaults:返回整数,不返回NSArray

时间:2012-03-06 22:03:05

标签: iphone objective-c nsarray nsuserdefaults

我正在尝试使用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"]

它仍然没有返回。

思考?谢谢!

2 个答案:

答案 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;
}