1

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

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

这是 NSUserDefaults 吗?核心数据?

4

5 回答 5

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
}
于 2013-04-04T14:25:17.880 回答
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

于 2013-04-04T14:28:46.470 回答
1
[[NSUserDefaults standardUserDefaults] setObject:@YES forKey:@"isLoggedIn"];

有效评论:您也可以使用setBool:forKey相同的结果。在这个任务之后立即调用synchronize也没有什么坏处(尽管它可能并不重要)。

于 2013-04-04T14:24:11.020 回答
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
于 2013-04-04T14:45:26.680 回答
0

Core Data 并不适合像这样的小而独特的数据。

NSUserDefaults 是处理此类小事的正确位置,但如果这些小事应该保密——比如登录详细信息——钥匙串会更好。

于 2013-04-04T14:28:11.153 回答