0
我想保存一個NSMutableArray到NSUserDeafults。我已經實現了NSCoding協議方法爲使保存一個NSMutableArray的自定義對象
-(id)initWithCoder:(NSCoder*)aDecoder{
self = [super init];
if(self!= nil){
self.subject = [aDecoder decodeObjectForKey:@"subj"];
self.notes = [aDecoder decodeObjectForKey:@"notes"];
self.dateDue = [aDecoder decodeObjectForKey:@"date"];
self.done = [[aDecoder decodeObjectForKey:@"done"] boolValue];
self.importancy = [aDecoder decodeObjectForKey:@"imp"];
}
return self;
}
和
-(void)encodeWithCoder:(NSCoder*)enCoder{
[enCoder encodeObject:self.subject forKey:@"subj"];
[enCoder encodeObject:self.notes forKey:@"notes"];
[enCoder encodeObject:self.dateDue forKey:@"date"];
[enCoder encodeObject:self.importancy forKey:@"imp"];
[enCoder encodeObject:[NSNumber numberWithBool:self.done] forKey:@"done"];
}
我保存它像這樣
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:hwArray] forKey:ARRAY_KEY];
,並得到像這樣
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *hwData = [currentDefaults objectForKey:ARRAY_KEY];
if (hwData != nil)
{
NSLog(@"data is not nil");
NSArray *savedHWArray = [NSKeyedUnarchiver unarchiveObjectWithData:hwData];
if (savedHWArray != nil){
NSLog(@"initiating array");
hwArray = [[NSMutableArray alloc] initWithArray:savedHWArray];
NSLog(@"hw array count: %i",[hwArray count]);
}
else{
hwArray = [[NSMutableArray alloc] init];
}
}
似乎完美根據this question,但我似乎無法加載它beacuse,即使我已經把對象放入數組並加載它,數組總是零在另一次運行。任何想法是什麼問題?
你叫'[NSUserDefaults standartUserDefaults] syncronize]'? – dariaa
原因可能是[[NSUserDefaults standartUserDefaults] syncronize]丟失 – meth
我試過了,它返回nil – raej2010