假设用户登录到我的应用程序中的某个服务。我如何“记住”用户这样做了,所以它不会再提示他/她这样做?
例如,每次应用程序启动时,如果用户登录,我希望它对用户帐户执行某些操作,否则,不要执行任何操作。用户从他们可以调用的可选登录窗口登录。一旦他们登录,我想(至少在概念上)设置一个变量,这样我就可以喜欢if (userIsLoggedIn) { ... }
并相应地做事。
这是 NSUserDefaults 吗?核心数据?
假设用户登录到我的应用程序中的某个服务。我如何“记住”用户这样做了,所以它不会再提示他/她这样做?
例如,每次应用程序启动时,如果用户登录,我希望它对用户帐户执行某些操作,否则,不要执行任何操作。用户从他们可以调用的可选登录窗口登录。一旦他们登录,我想(至少在概念上)设置一个变量,这样我就可以喜欢if (userIsLoggedIn) { ... }
并相应地做事。
这是 NSUserDefaults 吗?核心数据?
您可以轻松地将其存储在 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
}
如果您使用登录凭据,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
[[NSUserDefaults standardUserDefaults] setObject:@YES forKey:@"isLoggedIn"];
有效评论:您也可以使用setBool:forKey
相同的结果。在这个任务之后立即调用synchronize
也没有什么坏处(尽管它可能并不重要)。
正如其他答案所指出的那样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
Core Data 并不适合像这样的小而独特的数据。
NSUserDefaults 是处理此类小事的正确位置,但如果这些小事应该保密——比如登录详细信息——钥匙串会更好。