在整个应用程序中使用来自 appdelgate 的布尔值
Using the boolean value from appdelgate all across app
在我的应用程序中,我需要检查用户是否已经存在并需要进行相应的更新。为了实现这一点,我在 appdelegate.h 中创建了一个布尔值,并在整个应用程序中访问它。我需要做
@property(strong,nonatomic)AppDelegate*appDelegate;
appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate]
在 view 中加载了每个我想更改布尔值的控制器。为了减少我的编码,我在 appdelegate.h:
在 appdelegate.h 中,我创建了一个常量 APPDELEGATE,它将引用应用程序委托对象。现在使用我定义的 EXISTING_USER 作为共享应用程序常量的布尔值可以跨应用程序使用。
#define APPDELEGATE (AppDelegate *)[[UIApplication sharedApplication] delegate]
#define EXISTING_USER [APPDELEGATE existingUserUpdate]
@property (nonatomic ,readonly) bool existingUserUpdate;
在这种声明格式中 EXISTING_USER,我只能访问它,但我无法改变它的值。有什么方法可以使用这种方法更改所需视图控制器中的布尔值吗?或者我需要坚持使用之前的代码,例如在 view did load 每个视图控制器的方法中声明 app delegate obj?
app delegate 不是存储共享数据的地方,你应该有一个特定的(可能是单例)class。
但是,要更改值,您可以执行以下操作:
APPDELEGATE.existingUserUpdate = YES;
祝你好运。
你不能使用 NSUserDefaults 吗?
喜欢,
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
[defaults setBool: YES forKey : @"USER_EXISTENCE"];
随处使用它...
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
BOOL userExistance = [defaults boolForKey : @"USER_EXISTENCE"];
让我知道这是否有效,否则您仍有问题..
您可以创建一个简单的 class 来跟踪用户的状态,并且通过使用单例,您可以从应用程序的任何位置访问它。
SGUser.h
#import <Foundation/Foundation.h>
@interface SGUser : NSObject
+ (SGUser *) activeUser;
@property BOOL loggedIn;
@end
SGUser.m
#import "SGUser.h"
@implementation SGUser
+ (SGUser *) activeUser {
static SGUser *activeUser = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
activeUser = [[self alloc] init];
});
return activeUser;
}
- (id)init {
if (self = [super init]) {
_loggedIn = false;
}
return self;
}
@end
然后您可以从代码的任何部分轻松调用。
[[SGUser activeUser] setLoggedIn:true];
[[SGUser activeUser] loggedIn];
在我的应用程序中,我需要检查用户是否已经存在并需要进行相应的更新。为了实现这一点,我在 appdelegate.h 中创建了一个布尔值,并在整个应用程序中访问它。我需要做
@property(strong,nonatomic)AppDelegate*appDelegate;
appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate]
在 view 中加载了每个我想更改布尔值的控制器。为了减少我的编码,我在 appdelegate.h:
在 appdelegate.h 中,我创建了一个常量 APPDELEGATE,它将引用应用程序委托对象。现在使用我定义的 EXISTING_USER 作为共享应用程序常量的布尔值可以跨应用程序使用。
#define APPDELEGATE (AppDelegate *)[[UIApplication sharedApplication] delegate]
#define EXISTING_USER [APPDELEGATE existingUserUpdate]
@property (nonatomic ,readonly) bool existingUserUpdate;
在这种声明格式中 EXISTING_USER,我只能访问它,但我无法改变它的值。有什么方法可以使用这种方法更改所需视图控制器中的布尔值吗?或者我需要坚持使用之前的代码,例如在 view did load 每个视图控制器的方法中声明 app delegate obj?
app delegate 不是存储共享数据的地方,你应该有一个特定的(可能是单例)class。
但是,要更改值,您可以执行以下操作:
APPDELEGATE.existingUserUpdate = YES;
祝你好运。
你不能使用 NSUserDefaults 吗?
喜欢,
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
[defaults setBool: YES forKey : @"USER_EXISTENCE"];
随处使用它...
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
BOOL userExistance = [defaults boolForKey : @"USER_EXISTENCE"];
让我知道这是否有效,否则您仍有问题..
您可以创建一个简单的 class 来跟踪用户的状态,并且通过使用单例,您可以从应用程序的任何位置访问它。
SGUser.h
#import <Foundation/Foundation.h>
@interface SGUser : NSObject
+ (SGUser *) activeUser;
@property BOOL loggedIn;
@end
SGUser.m
#import "SGUser.h"
@implementation SGUser
+ (SGUser *) activeUser {
static SGUser *activeUser = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
activeUser = [[self alloc] init];
});
return activeUser;
}
- (id)init {
if (self = [super init]) {
_loggedIn = false;
}
return self;
}
@end
然后您可以从代码的任何部分轻松调用。
[[SGUser activeUser] setLoggedIn:true];
[[SGUser activeUser] loggedIn];