在iOS开发中,NSUserDefaults
是一个用于存储应用程序的配置信息和首选项的便捷方式。NSMutableArray
是一个可变数组,可以在运行时动态地添加和删除元素。然而,NSUserDefaults
只能存储属性列表(plist
)对象,如字符串、数字、数组、字典等。要在 NSUserDefaults
中存储自定义对象,需要将其转换为可以序列化的格式,例如 NSData
或使用 NSKeyedArchiver
进行归档。
以下是一个简单的示例,说明如何在 NSUserDefaults
的 NSMutableArray
中存储自定义对象:
Person
的类,包含 name
和 age
属性。@interface Person : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
- (void)encodeWithCoder:(NSCoder *)encoder;
- (instancetype)initWithCoder:(NSCoder *)decoder;
@end
@implementation Person
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeInteger:self.age forKey:@"age"];
}
- (instancetype)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (self) {
self.name = [decoder decodeObjectForKey:@"name"];
self.age = [decoder decodeIntegerForKey:@"age"];
}
return self;
}
@end
NSData
对象,并将其添加到 NSMutableArray
中。Person *person = [[Person alloc] init];
person.name = @"John Doe";
person.age = 30;
NSMutableArray *array = [[NSMutableArray alloc] init];
NSData *personData = [NSKeyedArchiver archivedDataWithRootObject:person];
[array addObject:personData];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"peopleArray"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults
中获取 NSMutableArray
,并解档自定义对象。NSData *dataArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"peopleArray"];
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:dataArray];
for (NSData *personData in array) {
Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:personData];
NSLog(@"Name: %@, Age: %ld", person.name, (long)person.age);
}
请注意,这个示例使用了 NSCoding
协议和 NSKeyedArchiver
来序列化和反序列化自定义对象。这种方法可以在 NSUserDefaults
中存储复杂的自定义对象。
领取专属 10元无门槛券
手把手带您无忧上云