如何保存用户名和密码在NSUserDefault?(How to save User Name an

2019-07-31 09:39发布

我需要保存用户名和密码在NSUserDefault。 我打算把一个圆矩形按钮IB。 在按下其中的用户名和密码将被保存在NSUserDefault,这样当用户关闭应用程序,并尝试一段时间后重新登录,就不需要再次输入登录信息。 任何帮助将高度赞赏。

感谢和问候,

个人计算机

Answer 1:

保存用户名和密码,我会亲自建议用Keychain ,因为它们比更安全NSUserDefault在安全性方面,因为Keychain以加密的形式存储数据,而NSUserDefault存储为纯文本。 如果你仍然想使用NSUserDefault这里的路

为了节约

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSString
[prefs setObject:txtUsername.text forKey:@"userName"];
[prefs setObject:txtPassword.text forKey:@"password"];

 [prefs synchronize];

检索

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// getting an NSString
NSString *savedUsername = [prefs stringForKey:@"userName"];
NSString *savedPassword = [prefs stringForKey:@"password"];


Answer 2:

不要明文密码存储在用户的默认设置,即使它们是不重要的。

使用Keychain服务 。 的通用钥匙扣样品提供样品KeychainWrapper类,可以被用于读取和写入数据到钥匙扣完全相同setObject:forKey:接口NSUserDefaults用途。



Answer 3:

保存:

[[NSUserDefaults standardUserDefaults] setValue:_Username forKey:@"Username"];
[[NSUserDefaults standardUserDefaults] setValue:_password forKey:@"password"];
[[NSUserDefaults standardUserDefaults] synchronize];

阅读:

NSString * _UserName = [[NSUserDefaults standardUserDefaults] stringForKey:@"Username"];
NSString * _password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];


Answer 4:

首先,我不会在存储NSUserDefaults的密码。 我宁愿用钥匙串。

这是如何可以在保存NSUserDefaults的用户名:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
[standardUserDefaults setObject:myString forKey:@"username"];

NSString* username = [standardUserDefaults objectForKey:@"username"];

在另一方面,使用钥匙链一个简单的方法是使用SSKeychain山姆Soffes类 ; 在这种情况下,你只是说:

NSString* password = [SSKeychain passwordForService:@"YOUSERVICENAMEHERE" account:username];

[SSKeychain setPassword:password forService:@"YOUSERVICENAMEHERE" account:username];


Answer 5:

您可以将您的凭据是这样的:

-(void)saveToUserDefaults:(NSString*)stringUserName pswd:(NSString*)strPassword
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    if (standardUserDefaults) {
        [standardUserDefaults setObject:stringUserName forKey:@"UserName"];
        [standardUserDefaults setObject:strPassword forKey:@"Password"];
        [standardUserDefaults synchronize];
    }
}

你可以retrive他们是这样的:

-(NSArray*)retrieveFromUserDefaults
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    if (standardUserDefaults) {
        NSString *userName = (NSString*)[standardUserDefaults objectForKey:@"UserName"];
        NSString *password = (NSString*)[standardUserDefaults objectForKey:@"Password"];
    }
    NSArray* credentials = [NSArray arrayWithObjects:userName, password, nil];
    return credentials;
}


Answer 6:

无法设置现场NSUserDefaults的

发布我的代码链接到尽管放心,即使上述职务已被移走或删除未来的答案仍然对社区有益。

码:

你可以试试这个代码。 我非常肯定,它会为你工作。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

用于检索数据,你应该使用下面的代码:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"];

要么

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"];

编辑:

如果它仍然提供了nil ,那么你可以使用下面的代码:

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]];

要么

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]];

在上面的链接,你会发现我的答案和替换“init_val”在我的代码中有你的“用户名”和“密码”的钥匙

希望这可以帮助你。



Answer 7:

好的答案已经给出,但这里是在钥匙串 保存/载入/删除用户凭据的清洁方式。 考虑这一点,你可以创建一个单独的类,包括下面的代码:

。H

#import <Foundation/Foundation.h>

@interface KeychainUserPass : NSObject

+ (void)save:(NSString *)service data:(id)data;
+ (id)load:(NSString *)service;
+ (void)delete:(NSString *)service;

@end

.M

#import "KeychainUserPass.h"

@implementation KeychainUserPass

+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {

    return [NSMutableDictionary dictionaryWithObjectsAndKeys:
            (__bridge id)kSecClassGenericPassword, (__bridge id)kSecClass,
            service, (__bridge id)kSecAttrService,
            service, (__bridge id)kSecAttrAccount,
            (__bridge id)kSecAttrAccessibleAfterFirstUnlock, (__bridge id)kSecAttrAccessible,
            nil];
}

+ (void)save:(NSString *)service data:(id)data {

    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
    SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
    [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData];
    SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);
}

+ (id)load:(NSString *)service {

    id ret = nil;
    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
    [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
    [keychainQuery setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
    CFDataRef keyData = NULL;

    if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
        @try {
            ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
        }
        @catch (NSException *e) {
            NSLog(@"Unarchive of %@ failed: %@", service, e);
        }
        @finally {}
    }
    if (keyData) CFRelease(keyData);
    return ret;
}

+ (void)delete:(NSString *)service {

    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
    SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
}


@end


文章来源: How to save User Name and Password in NSUserDefault?