说起用户信息保存问题,每个开发者应该都有很多不一样的见解。iOS提供了多种本地数据持久化方式,常用的有沙盒机制、本地数据库等。使用最多,也最简单方便的估计就是NSUserDefaults了。NSUserDefaults也是沙盒机制的一种,他的沙盒路径是Library->Preferences,因为大家用的都多,这里就不介绍了。处于安全性考虑,一般我们保存的用户信息并不会包括账号、密码这类敏感数据(这类信息可以保存到钥匙串,或者加密以后再保存),博主这里说的用户信息指的就是类似用户昵称、头像、性别等对安全性要求不高的数据。
一、创建用户信息数据模型
XPYUserModel.h
/// XPYBaseModel是博主之前创建的数据模型的基类,实现了YYModel协议(使用YYModel第三方库)
#import "XPYBaseModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPYUserModel : XPYBaseModel <NSSecureCoding> // 归、解档操作必须实现NSCoding协议或者NSSecureCoding协议,我们当然使用保证数据安全性的NSSecureCoding
@property (nonatomic, copy) NSString *userId;
@property (nonatomic, copy) NSString *nickname;
@property (nonatomic, copy) NSString *age;
@end
NS_ASSUME_NONNULL_END
XPYUserModel.m
#import "XPYUserModel.h"
@implementation XPYUserModel
/// 必须实现的两个协议方法
- (void)encodeWithCoder:(nonnull NSCoder *)coder {
[self yy_modelEncodeWithCoder:coder];
}
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
return [self yy_modelInitWithCoder:coder];
}
/// 必须实现supportsSecureCoding方法,返回YES
+ (BOOL)supportsSecureCoding {
return YES;
}
@end
/// 因为博主使用了YYModel,所以两个协议方法中只是调用了YYModel的方法,若是自己写代码,如下
- (void)encodeWithCoder:(nonnull NSCoder *)coder {
[coder encodeObject:self.userId forKey:@"userId"];
[coder encodeObject:self.nickname forKey:@"nickname"];
[