Ios 在整个应用程序中使用appdelgate中的布尔值

Ios 在整个应用程序中使用appdelgate中的布尔值,ios,boolean,appdelegate,Ios,Boolean,Appdelegate,在我的应用程序中,我需要检查用户是否已经存在,并需要相应地更新。为了实现这一点,我在appdelegate.h中创建了一个布尔值,并在整个应用程序中访问它。我需要做 @property(strong,nonatomic)AppDelegate*appDelegate; appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate] 在视图中,加载了我想要更改布尔值的每个控制器的。为了减少编码,我在appd

在我的应用程序中,我需要检查用户是否已经存在,并需要相应地更新。为了实现这一点,我在appdelegate.h中创建了一个布尔值,并在整个应用程序中访问它。我需要做

@property(strong,nonatomic)AppDelegate*appDelegate;  
appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate]   
视图中,加载了我想要更改布尔值的每个控制器的。为了减少编码,我在appdelegate.h中执行了以下操作:

在appdelegate.h中,我创建了一个常量appdelegate,它将引用app delegate obj。现在使用它,我已经将现有用户定义为布尔值,它是共享应用程序的常量,可以在应用程序之间使用

#define APPDELEGATE (AppDelegate *)[[UIApplication sharedApplication] delegate]
#define EXISTING_USER [APPDELEGATE existingUserUpdate]  
@property (nonatomic ,readonly) bool existingUserUpdate;

在这种声明现有用户的格式中,我只能访问它,但无法更改其值。是否有任何方法可以使用这种方法更改所需视图控制器中的布尔值?或者我需要继续使用前面的代码,比如在视图中声明app delegate obj确实加载了每个视图控制器的方法?

app delegate不是存储共享数据的地方,为此,您应该有一个特定的(可能是单例)类

但是,要更改该值,可以执行以下操作:

APPDELEGATE.existingUserUpdate = YES;

祝你好运。

应用程序委托不是存储共享数据的地方,你应该为此设置一个特定的类(可能是单例类)

但是,要更改该值,可以执行以下操作:

APPDELEGATE.existingUserUpdate = YES;

祝你好运。

你不能使用默认值吗

在任何你喜欢的地方使用它

NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
BOOL userExistance = [defaults boolForKey : @"USER_EXISTENCE"];

让我知道这是否有效,或者您仍然存在问题。

您不能使用NSUserDefault吗

在任何你喜欢的地方使用它

NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
BOOL userExistance = [defaults boolForKey : @"USER_EXISTENCE"];

让我知道这是否有效,或者您仍然有问题。

您可以创建一个简单的类来跟踪用户的状态,通过使用singletone,您可以从应用程序中的任何位置访问它

SGUser.h

#import <Foundation/Foundation.h>

@interface SGUser : NSObject
+ (SGUser *) activeUser;
@property BOOL loggedIn;
@end
然后从代码的任何部分可以轻松调用

[[SGUser activeUser] setLoggedIn:true];
[[SGUser activeUser] loggedIn];

您可以创建一个简单的类来跟踪用户的状态,通过使用singletone,您可以从应用程序中的任何位置访问它

SGUser.h

#import <Foundation/Foundation.h>

@interface SGUser : NSObject
+ (SGUser *) activeUser;
@property BOOL loggedIn;
@end
然后从代码的任何部分可以轻松调用

[[SGUser activeUser] setLoggedIn:true];
[[SGUser activeUser] loggedIn];


为什么首先要在应用程序代理中存储数据?应避免在应用程序代理中存储“全局数据”。这里真的不是做这种事情的地方。如果必须有一些可广泛访问的变量或值,可以将其定义为常量(不可变),或者由服务或管理器管理。使用app delegate进行此类操作非常麻烦:(.不,我在AppDelegate中存储数据,我只是在AppDelegate中创建了一个布尔变量,这样我就可以在代码中的其他位置访问它。为什么要在app delegate中存储数据?你应该避免在app delegate中存储“Globals”。它真的不适合这种情况。如果你必须有一些可广泛访问的变量或值可以将其定义为常量(不可变),也可以由服务或管理器对其进行管理。将应用程序委托用于此类操作非常麻烦:(.不,我在AppDelegate中存储数据,我只是在AppDelegate中创建了一个布尔变量,这样我就可以在代码中的其他地方访问它。我同意,轻量级单例类应该用于这类事情。我尝试过使用AppDelegate.existingUserUpdate=YES;但它说“不允许将objective-c消息的返回结果赋值为'read-only'。”(这是因为您在属性中添加了'readonly'标志!我现在删除了属性readonly still,除了[APPDELEGATE setExistingUserUpdate:YES]之外,点表示法还在起作用);这对我有用。感谢您的支持@Yedidya我同意,应该使用轻量级的单例类来完成这类工作。我尝试过使用APPDELEGATE.existingUserUpdate=YES;但它说“不允许将objective-c消息的返回结果赋值为“只读”。:(这是因为您在属性中添加了“readonly”标志!我现在删除了属性readonly still dot notation,除了[APPDELEGATE setExistingUserUpdate:YES]之外,它还在工作。);这对我有效。感谢您的支持@YedIya NSUserDefault不用于在应用程序运行时存储共享数据,它应用于在应用程序终止时保存数据。如果您决定使用它(它将起作用),则需要添加“[[NSUserDefaults standardUserDefaults]synchronize];'函数以立即保存数据(它将同步将数据插入用户默认文件)。即使在应用程序终止后,登录用户的存在也很重要,不是吗?@Mayur Deshmukh使用NSUserDeafault也可以达到我的目的。我检查了它。这在我当前的应用程序中也可以正常工作。谢谢。由于我觉得loggedInUser的存在是应用程序的一个属性,我认为应该是p已在NSUserDefaults中存储。虽然您可以使用Mr.Me的解决方案并将其保存在Getter和Setters中,但NSUserDefaults不用于在应用程序运行时存储共享数据,它应用于在应用程序终止时保存数据。如果您决定使用它(它将起作用),则需要添加“[[NSUserDefaults standardUserDefaults]synchronize];'函数以立即保存数据(它将同步将数据插入用户默认文件)。即使在应用程序终止后,登录用户的存在也很重要,不是吗?@Mayur Deshmukh使用NSUserDeafault也可以达到我的目的。我检查了它。这在我当前的应用程序中也可以正常工作。谢谢。由于我觉得loggedInUser的存在是应用程序的一个属性,我认为应该是p尽管您可以使用Mr.Me的解决方案并将其持久化到getter和setter中