【问题标题】:Unable to logout successfully using NSUserDefault无法使用 NSUserDefault 成功注销
【发布时间】:2016-11-14 12:22:16
【问题描述】:

当我点击注销按钮时,登录页面上的视图再次打开我的主页..这是我的问题..

这是我的代码- 此代码用于检查 NSUserDefault 中的值

-(void)viewWillAppear:(BOOL)animated{

    self.navigationController.navigationBar.hidden = YES;
    // cheq the value in NSUserdeafault

    if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"login"] boolValue]) {

        HomePage *mainView = [[HomePage alloc]initWithNibName:@"HomePage" bundle:nil];

        [self.navigationController pushViewController:mainView animated:YES];
    }
}

这个是注销按钮

- (IBAction)logout_btn:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"0" forKey:@"logout"];

[defaults synchronize];
         LoginPage *log = [[LoginPage alloc] init];
        MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:log];
        navController.navigationBar.translucent=NO;

        [menuController setRootController:navController animated:NO];


}

请给我解决办法

【问题讨论】:

  • 似乎您没有粘贴注销按钮代码,但视图会出现两次代码。请发布您的注销按钮代码。
  • @rckoenes 先生,这是我的注销按钮代码
  • 您为什么要在NSUserDefaults 中保持“登录”状态?这太荒谬了。
  • 一方面是设置注销键的值,另一方面是检查登录键的值...

标签: objective-c xib


【解决方案1】:

您正在为您的 UserDefault 设置一个字符串,这将使您的检查为真。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setValue:@"0" forKey:@"logout"];

应该是这样的:

[[NSUserDefaults standardUserDefaults] setValue:@NO forKey:@"logout"];

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"logout:]; // explicitly indicating that you are setting a BOOL

然后在您的支票中您可以使用

[[[NSUserDefaults standardUserDefaults] boolForKey:@"logout"]; // you won't need to specify boolValue anymore unless you use the first option (setValue:@NO)

【讨论】:

    【解决方案2】:

    “登录”键使用 Bool 数据类型。

    当你登录时使用这个:

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"login"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    当点击注销按钮时设置这个:

    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"login"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    【讨论】:

    • - (IBAction)logout_btn:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [默认 setValue:@"0" forKey:@"logout"]; [默认同步]; LoginPage *log = [[LoginPage alloc] init]; MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:log]; navController.navigationBar.translucent=否; [menuController setRootController:navController Animation:NO];先生这是我的注销按钮代码
    • 那么在NSUserDefaults 中持有YES/NO 究竟是什么意思?确定已登录意味着您具有活动的网络连接并已通过身份验证?那么你是如何得到这些东西的呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2021-06-15
    • 2017-12-25
    • 2014-03-01
    相关资源
    最近更新 更多