在整个应用程序中使用来自 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];