保存自定义对象的 NSMutableArray
Posted
技术标签:
【中文标题】保存自定义对象的 NSMutableArray【英文标题】:Saving a NSMutableArray of custom objects 【发布时间】:2014-03-07 17:05:40 【问题描述】:我正在尝试将 NSMutableArray 保存到 NSUserDeafults。我已经实现了 NSCoding 协议方法
-(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,这似乎很完美,但我似乎无法加载它,因为即使我已将对象放入数组并加载它,数组在另一次运行时总是为零。知道有什么问题吗?
【问题讨论】:
你打电话给[NSUserDefaults standartUserDefaults] syncronize]
吗?
原因可能是缺少[[NSUserDefaults standartUserDefaults] syncronize]
我试过了,它返回 nil
你不需要调用synchronize
,除非应用程序在系统自动将更新的默认值写入磁盘之前被杀死。
【参考方案1】:
另一种选择是将对象写入文件而不是 NSUserDefaults。查看question here 的答案,了解如何执行此操作的完整代码示例。
【讨论】:
以上是关于保存自定义对象的 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSKeyedArchiver 将 NSMutableArray 保存到 NSUserDefaults
将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults