【问题标题】:Global Variable Objective C [duplicate]全局变量目标 C [重复]
【发布时间】:2013-06-03 06:32:40
【问题描述】:

我正在目标 c 中创建一个登录系统(用于 iPhone 应用程序),我想记录用户是否登录。我认为最好的方法是在验证他们的凭据后使用全局变量BOOL isLoggedIn。有人可以帮助我或给我一些建议,因为我完全不知道如何做到这一点。

提前致谢

【问题讨论】:

  • 你有没有尝试过任何东西?之前问过几个类似的问题。首先阅读常见问题解答。
  • 你可以在xcode项目的.pch文件中定义一个BOOL。那将是您的全局变量,并且可以在整个项目中访问。
  • Don't go global 应该包含在答案中——这在客观 c 设计模式中是非常不鼓励的
  • "BOOL isLoggedIn" - 坏主意。您需要提供某种类型的绑定。也就是说,不要依赖BOOL 标志;相反,将授权绑定到身份验证。要了解原因,请参阅Preventing Widespread Automated Attacks in iOS

标签: ios objective-c global-variables


【解决方案1】:
-(void)saveToUserDefaults:(BOOL)isLoggedIn
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    if (standardUserDefaults) {
        [standardUserDefaults setBool:isLoggedIn forKey:@"isLoggedIn"];
        [standardUserDefaults synchronize];
    }
}

使用 NSUserDefaults,它将保留该值,直到您的应用程序从手机中删除。

【讨论】:

    【解决方案2】:

    使用这两个功能

       -(void)addToNSUserDefaults:(id)pobjValue forKey:(NSString *)pstrKey{
           NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults];
           [objUserDefaults setObject:pobjValue forKey:pstrKey];
           [objUserDefaults synchronize];
       }
    
       -(id)fetchFromNSUserDefaults:(NSString *)pstrKey{
           NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults];
           return [objUserDefaults objectForKey:pstrKey];
       }
    

    当你存储它时

            [self addToNSUserDefaults:@"YES" forKey:@"isLoggedIn"];
    

    当检索它时

           if ([self fetchFromNSUserDefaults:@"isLoggedIn"]==nil || [[self fetchFromNSUserDefaults:@"isLoggedIn"] isEqualToString:@""]) {
                 //Go to Login
           }
           else 
               //all ready Login
    

    【讨论】:

    • +1 - 或者添加一个 NSNumber 作为值 @YES 而不是字符串 - 然后只需检查 value != (atsign)YES。让它有点短恕我直言
    • @Mario 是的,先生,您是对的。
    【解决方案3】:

    您可以使用 NSUserDefaults 来存储应用程序的登录状态,如其他人所述。在删除应用程序之前,该值将保持不变。即,即使您终止应用程序或重新启动设备,如果最后一个值是“登录”。

    如果您想在应用程序被终止或设备重新启动时“重置”用户的状态,那么另一种方法是将您的用户对象设置为单例。当应用程序被杀死或设备重新启动时,与 NSUserDefault 不同,用户的状态将被重置(因为对象不再存在)并且用户将需要再次登录。使用此方法:http://lukeredpath.co.uk/blog/a-note-on-objective-c-singletons.html 创建用户对象的单例

    + (id)sharedInstance
    {
      static dispatch_once_t pred = 0;
      __strong static id _sharedObject = nil;
      dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init]; // or some other init method
      });
      return _sharedObject;
    }
    

    将以上内容添加到您的用户类中,然后您可以添加与用户状态相关的适当属性,例如 BOOL isLoggedOn,然后您可以沿着这条线访问:

    BOOL isLoggedIn = [[User sharedInstance] isLoggedIn];
    

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 2022-01-28
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多