如何在 NSUserDefaults 中保存 "custom class objects" 的 NSMutableArray?

How to save NSMutableArray of "custom class objects" in NSUserDefaults?

我看过一些关于如何无法在 NSUserDefaults 中保存基于 NSMutableArray 的对象的帖子,但是有一种方法可以使用 [NSKeyedArchiver] 和用 NSCoder 对其进行编码,尽管我正在努力了解如何进行编码,并希望有人能提供帮助。

Student *student1 = [Student studentWithImage:[UIImage imageNamed:@"default"] withForename:@"John" withSurname:@"Smith" withAddress:@"3 Fake Road, Faketown, FA31 KEE" withDateOfBirth:[dateFormatter dateFromString:@"17-Jul-93"] withAge:24];
[studentArray addObject:student1];

我想将这个和其他一些类似的 Students 保存到我的 NSMutableArray studentArray。然后我想将这个数组保存到 NSUserDefaults 并再次加载它。

I have seen this post here 看起来是我问题的正确答案,但我需要帮助将其实现到我的代码中,因为我很难理解它! 谢谢

先在Student中添加这个class

- (void)encodeWithCoder:(NSCoder *)coder;
{
    [coder encodeObject:self.Forename forKey:@"keyForename"];
    // do same for all property
}

- (id)initWithCoder:(NSCoder *)coder;
{
    self = [[Student alloc] init];
    if (self != nil)
    {
        self.Forename = [coder decodeObjectForKey:@"keyForename"];
        // do same other property here
    }   
    return self;
}

存储数组

[studentArray addObject:student1];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:studentArray] forKey:@"mySavedArray"];

检索数组

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
        NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
        if (oldArray != nil) {
                customObjectArray = [[NSMutableArray alloc] initWithArray:oldArray];
        } else {
                customObjectArray = [[NSMutableArray alloc] init];
        }
}