首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在NSUserDefaults中的NSMutableArray中存储自定义对象

在iOS开发中,NSUserDefaults 是一个用于存储应用程序的配置信息和首选项的便捷方式。NSMutableArray 是一个可变数组,可以在运行时动态地添加和删除元素。然而,NSUserDefaults 只能存储属性列表(plist)对象,如字符串、数字、数组、字典等。要在 NSUserDefaults 中存储自定义对象,需要将其转换为可以序列化的格式,例如 NSData 或使用 NSKeyedArchiver 进行归档。

以下是一个简单的示例,说明如何在 NSUserDefaultsNSMutableArray 中存储自定义对象:

  1. 创建一个自定义对象,例如一个名为 Person 的类,包含 nameage 属性。
代码语言:objc
复制
@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
  1. 将自定义对象归档为 NSData 对象,并将其添加到 NSMutableArray 中。
代码语言:objc
复制
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];
  1. NSUserDefaults 中获取 NSMutableArray,并解档自定义对象。
代码语言:objc
复制
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 中存储复杂的自定义对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

21分43秒

128、商城业务-商品上架-sku在es中存储模型分析

1分29秒

在Flask框架中,Response对象的`__bool__`和`__nonzero__`方法被重载

10分3秒

65-IOC容器在Spring中的实现

22分58秒

011_尚硅谷_Scala_在IDE中编写HelloWorld(四)_伴生对象的扩展说明

10分28秒

JavaSE进阶-035-接口在开发中的作用

7分46秒

JavaSE进阶-037-接口在开发中的作用

32分47秒

JavaSE进阶-038-接口在开发中的作用

5分55秒

JavaSE进阶-034-接口在开发中的作用

24分57秒

JavaSE进阶-036-接口在开发中的作用

5分36秒

05.在ViewPager的ListView中播放视频.avi

58秒

DC电源模块在通信仪器中的应用

9分29秒

一小时学会Redis系列教程--05-Redis 命令-在 Redis 中存储哈希

领券