记住用户已登录 - 我会在iOS应用程序中保存这样的信息吗?

时间:2013-04-04 14:21:13

标签: ios objective-c ios5 ios6

假设用户在我的应用中登录某个服务。我如何“记住”用户这样做了,所以不再提示他/她这样做了?

例如,每次启动应用程序时,我都希望它在用户帐户中执行某些操作(如果他们已登录),否则请勿执行任何操作。用户从他们可以调用的可选登录窗口登录。一旦他们登录,我想(至少在概念上)设置一个变量,这样我就可以像if (userIsLoggedIn) { ... }一样做事情。

这是NSUserDefaults吗? CoreData?

5 个答案:

答案 0 :(得分:2)

您可以轻松地将其存储在NSUserDefaults中。

// init
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// set the default value
[defaults setObject:@"YES" forKey:@"loggedIn"];
// read value
NSString *loggedIn = [defaults objectForKey:@"loggedIn"]

更新:

使用BOOL设置:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"loggedIn"];

读取值:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"loggedIn"]) {
    // go to login screen
} else {
   // go to main screen
}

答案 1 :(得分:2)

如果您使用登录凭据,NSUserDefaults会将您的应用暴露给安全风险。

我建议使用 NSKeyedArchiver

这个网站有一个关于如何实现它的简单解释!

http://haoxiang.org/2011/11/ios-how-to-save-and-load-a-custom-object/

Apple API Doc仅供将来参考。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html

答案 2 :(得分:1)

[[NSUserDefaults standardUserDefaults] setObject:@YES forKey:@"isLoggedIn"];

有效评论:您也可以使用setBool:forKey来获得相同的结果。在此任务之后立即调用synchronize也不会造成伤害(尽管可能并不重要)。

答案 3 :(得分:1)

正如其他答案所指出的那样NSUserDefaults在存储简单的非私有状态时非常有用。

我通常喜欢用一个类别包装它,以便我可以更容易地与用户默认交互,而不必担心键等。

示例看起来像这个类别

NSUserDefaults + PASAuthorisation.h

@interface NSUserDefaults (PASAuthorisation)

@property (nonatomic, assign, getter=pas_isLoggedIn) BOOL pas_loggedIn;

@end

NSUserDefaults + PASAuthorisation.m

#import "NSUserDefaults+PASAuthorisation.h"

static NSString * const PASLogginInKey = @"PASLogginInKey";

@implementation NSUserDefaults (PASAuthorisation)

- (BOOL)pas_isLoggedIn;
{
  return [self boolForKey:PASLogginInKey];
}

- (void)setPas_loggedIn:(BOOL)pas_loggedIn;
{
  [self setBool:pas_loggedIn forKey:PASLogginInKey];
}

@end

答案 4 :(得分:0)

核心数据并不适合像这样的小而独特的数据。

NSUserDefaults对于像这样的小事情来说是个合适的地方,但如果这些小东西应该是秘密的 - 比如登录细节 - 钥匙串就更好了。