Kir*_*mar 0 session-variables objective-c ios
如何在iOS中获取会话变量.例如,我从登录页面开始有五个视图控制器.以用户身份登录时,我能够从我的JSON数据中获取用户ID.我希望在所有屏幕中使用此用户ID以更顺畅地完成它.我做的是拿一个隐藏变量并将其发送到下一个屏幕,当我们有100个屏幕时这是一件很难的事.有没有其他方法来设置会话变量并访问整个应用程序?
我曾尝试过在Appdelegate中保留NSString,但我无法理解如何做到这一点.
您不需要花哨的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.
在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)
| 归档时间: |
|
| 查看次数: |
6363 次 |
| 最近记录: |