如何在 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];
}
}
我看过一些关于如何无法在 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];
}
}