2014-03-07 33 views
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,即使我已經把對象放入數組並加載它,數組總是零在另一次運行。任何想法是什麼問題?

+0

你叫'[NSUserDefaults standartUserDefaults] syncronize]'? – dariaa

+0

原因可能是[[NSUserDefaults standartUserDefaults] syncronize]丟失 – meth

+0

我試過了,它返回nil – raej2010

回答

0

另一種選擇是將對象寫入文件而不是NSUserDefaults。查看這個question here的答案,瞭解如何做到這一點的完整代碼示例。

相關問題