如何跨控制器访问变量?

时间:2014-08-14 19:22:48

标签: objective-c ios7 appdelegate

所以我在ViewController.h中声明了这个:

@property (nonatomic) BOOL areThereAds;

如何在AppDelegate.m类中访问此变量,以便在areThereAds == NO UIStoryboard *storyboard; if (areThereAds == NO){ storyboard == [UIStoryboard storyboardWithName:@"Main_iPhone-noAds" bundle:nil]; } else{ storyboard == [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] } 时加载具有不同布局的不同故事板。

类似的东西:

{{1}}

2 个答案:

答案 0 :(得分:2)

在整个应用程序中访问布尔值的另一种方法是将其存储在[NSUserDefaults standardUserDefaults]中,如下所示:

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"isCompleted"];
[[NSUserDefaults standardUserDefaults] synchronize];

从任何类中检索

BOOL someBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"isCompleted"];

答案 1 :(得分:0)

当我处理与外部API响应相关的数据时,我创建了一个单例类,我可以在每个ViewController实现文件中包含标题,然后获取单例实例,然后检索它的值。

例如:

ViewController1.h内部:

#include "SingletonClass.h"

ViewController1.m内部:

[[SingletonClass getClassInstance] someBool:YES];

在要从以下位置检索变量的类的头文件中:

#include "SingletonClass.h"

在要从以下位置检索变量的类的实现文件中:

bool someBool =  [[SingletonClass getClassInstance] someBool]
if (someBool) {

} else {

}

我现在不在我的Mac前面,所以这可能不完全在语法上正确,但我希望它可以让你知道如何完成你的问题

注意:IMO接受的答案使用NSUserDefaults是一种不好的做法,因为它是一个系统范围的用户偏好数据库,为它分配应用程序特定的值感觉就像使用它不适合它的东西。 (我们想在Mac上使用Windows风格的注册表吗?)