4

我正在构建一个应用程序,在登录时,用户名/密码的正确组合会返回一些基本用户信息(名字、姓氏、用户类型、公司 ID 等)。

我将需要在整个应用程序中使用这些值和字符串来检索特定于用户的数据。

我可以在登录时将所有这些值和字符串存储在 NSObject 或 NSData 子类中,以便稍后调用它来检索我需要的项目吗?我怎样才能做到这一点?还是有更好的选择?

4

3 回答 3

6

如果您只是存储从成功登录返回的数据,如您所说的,名字,姓氏等。我会使用 NSUserDefaults。如果您打算存储任何敏感信息,例如用户名或密码或其他任何需要额外保密的信息,我建议您使用钥匙串。

于 2013-03-07T17:12:47.897 回答
4

我会使用钥匙串,因为它是安全的。检查这个STKeychain

于 2013-03-07T17:13:10.643 回答
3

您可以使用NSUserDefaults. 创建用户模型。实施NSCoding协议。存储时存档,从 获取时取消存档NSUserDefaults

@interface User: NSObject<NSCoding>

    @property (nonatomic, copy)   NSString *firstName;
    @property (nonatomic, copy) NSString *lastName;

    - (void)save;
    + (id)savedUser;

//用户.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];
于 2013-03-07T17:24:27.163 回答