代码之家  ›  专栏  ›  技术社区  ›  Manesh

如何在NSUserDefaults中保存“自定义类对象”的NSMutableArray?[副本]

  •  0
  • Manesh  · 技术社区  · 9 年前

    我看到了一些关于如何无法保存基于对象的文件的帖子 NSMutableArray 在里面 NSUserDefaults [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 保存到我的 studentArray 。然后我想将此数组保存到 然后重新加载。

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

    1 回复  |  直到 9 年前
        1
  •  3
  •   KKRocks    9 年前

    首先将其添加到 Student

    - (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];
            }
    }