假设用户在我的应用中登录某个服务。我如何“记住”用户这样做了,所以不再提示他/她这样做了?
例如,每次启动应用程序时,我都希望它在用户帐户中执行某些操作(如果他们已登录),否则请勿执行任何操作。用户从他们可以调用的可选登录窗口登录。一旦他们登录,我想(至少在概念上)设置一个变量,这样我就可以像if (userIsLoggedIn) { ... }
一样做事情。
这是NSUserDefaults吗? CoreData?
答案 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对于像这样的小事情来说是个合适的地方,但如果这些小东西应该是秘密的 - 比如登录细节 - 钥匙串就更好了。