iOS中的会话变量

Kir*_*mar 0 session-variables objective-c ios

如何在iOS中获取会话变量.例如,我从登录页面开始有五个视图控制器.以用户身份登录时,我能够从我的JSON数据中获取用户ID.我希望在所有屏幕中使用此用户ID以更顺畅地完成它.我做的是拿一个隐藏变量并将其发送到下一个屏幕,当我们有100个屏幕时这是一件很难的事.有没有其他方法来设置会话变量并访问整个应用程序?

我曾尝试过在Appdelegate中保留NSString,但我无法理解如何做到这一点.

cre*_*orn 6

您不需要花哨的class/singleton/NSUserdefaults来执行此操作:Heres Why.

  • 会话变量必须是任何东西.
  • 该类本身不需要维护状态
  • NSUserDefaults 不是会话,它们在应用程序启动之间保持不变.

你真正需要的只是一个静态类,里面有一个NSMutableDictionary.

// Session.h

@interface Session : NSObject
+ (NSMutableDictionary *) sessionVariables;
@end

// Session.m
#import "Session.h"

static NSMutableDictionary *_session;
@interface Session

+ (NSMutableDictionary *) sessionVariables {
    if (!_session) {
        _session = [NSMutableDictionary alloc] init];
    }

    return _session;

}
Run Code Online (Sandbox Code Playgroud)

因此,在每个类中,您希望会话可用,您需要做的就是导入Session.h 并使用这样的类[Session sessionVariables] setObject:@"something" forKey:@"someKey"]

并解决问题id someValue =[Session sessionVariables] [@"something"];`

我建议的一件事是请不要将用户/密码/敏感数据存储在所提供的任何答案中(包括我的),请使用iOS Keychain.


Dha*_*ekh 5

在NSUserDefaults中保存您的值,并从中获取它

保存:

[[NSUserDefaults standardUserDefaults] setObject:STRING_OBJECT_OF_YOUR_JSON_LOGIN_ID forKey:@"UserLoginIdSession"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

for retrive:

NSString *str = [[NSUserDefaults standardUserDefaults] valueForKey:@"UserLoginIdSession"];
Run Code Online (Sandbox Code Playgroud)

当用户从您的应用程序注销时,将其设置为@""

[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"UserLoginIdSession"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)