保存自定义对象的 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的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中保存 NSMutableArray

使用 NSKeyedArchiver 将 NSMutableArray 保存到 NSUserDefaults

将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults

NSMutableArray 与自定义对象?

在 iOS 中保存/序列化自定义对象的正确方法

以最节省内存的方式循环自定义对象的 NSMutableArray