我正在构建一个应用程序,在登录时,用户名/密码的正确组合会返回一些基本的用户信息(firstName,lastName,userType,companyID等)。
我将在整个应用程序中需要这些值和字符串来检索用户特定的数据。
我可以在NSObject或NSData子类中登录时存储所有这些值和字符串,以便我以后可以调用它来检索我需要的项目吗?我怎样才能做到这一点?还是有更好的选择?
答案 0 :(得分:6)
如果您只是存储从成功登录返回的数据,如您所说,名字,姓氏等。我会使用NSUserDefaults。 如果您打算存储任何敏感信息,如用户名或密码或其他需要额外保密的信息,我建议您使用钥匙串。
答案 1 :(得分:4)
我会使用Keychain因为它是安全的。请检查此STKeychain
答案 2 :(得分:3)
您可以使用NSUserDefaults
。创建用户模型。实施NSCoding
协议。从NSUserDefaults
获取时存档和取消存档时存档。
@interface User: NSObject<NSCoding>
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
- (void)save;
+ (id)savedUser;
// User.m
#define kSavedUser @"SavedUser"
#pragma mark - Encoding
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.firstName forKey:@"FirstName"];
[encoder encodeObject:self.lastName forKey:@"LastName"]
}
#pragma mark - Decoding
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if (self)
{
_firstName = [decoder decodeObjectForKey:@"FirstName"];
_lastName = [decoder decodeObjectForKey:@"LastName"];
}
return self;
}
-(void)save
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self];
[defaults setObject:data forKey:kSavedUser];
[defaults synchronize];
}
+ (id)savedUser
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kSavedUser];
if (data)
{
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
return nil;
}
+ (void)clearUser
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:kSavedUser];
[defaults synchronize];
}
现在您可以创建
的实例User *user = [[User alloc]init];
user.firstName = @"";
user.lastName = @"";
[user save];
当您想要检索
时User *user = [User savedUser];
编辑: 如果要清除数据,请调用静态方法以删除已保存的用户信息
[User clearUser];