我是Objective-C的初学者,我正在尝试使用全局变量。我知道这个问题已被问了一百次,但没有一个答案对我有用。 我正在尝试在一个类中声明一个BOOL变量,并在另一个类中检查它的值。这就是我正在使用的: SController.h:
@interface SController : UIViewController {
BOOL leftSide;
BOOL rightSide;
}
SController.m:
- (void)viewDidLoad {
leftSide = YES;
rightSide = YES;
}
现在,对于我正在尝试访问BOOL的值的类:
#import "SController.h"
@interface VViewController : UIViewController
{
}
和VViewController的.m:
- (void)viewDidLoad {
// See what the BOOL values from SController are.
}
我尝试了什么: 在这里讨论以前的相关问题,我已经尝试将“extern”放在SController.h中的BOOLs声明前面,但这没有用。我尝试将SControllers头文件导入VViewController,但这也无效。我对Objective-C和编程非常陌生,所以我很难绕过这样的基本概念。我理解使用全局变量的潜在问题,但这个程序非常小并且供个人使用。如果有人能告诉我要改变什么来实现这一目标,那就太棒了。
答案 0 :(得分:1)
与其他人所说的一样,不要为此(以及其他大多数)目的使用全局变量。
您创建了iVars并且为了访问它们,您需要将它们暴露给其他对象。
您通常通过在SController
s头文件中定义@properties来实现此目的。这样做时,您不需要自己创建iVar,它们是隐式创建的。并且自动创建访问iVars的方法(getter和setter)。
您的SControllers标头看起来像这样:
@interface SController: UIViewController
//no need to declare the iVars here, they are created by the @property definitions
@property (nonatomic, assign) BOOL leftSide;
@property (nonatomic, assign) BOOL rightSide;
@end
在你的另一个viewController中,你需要一个你之前创建的SController实例的引用,并且想要“讨论”(你理解这一点很重要),然后你可以通过生成的getter / setter方法访问实例变量这样:
//this is "dot notation", the first line would be equivalent
//to writing: [sControllerInstance setLeftSide: YES]
sControllerInstance.leftSide = YES;
BOOL valueRightSide = sControllerInstance.rightSide;
请阅读:objective-c属性,getter / setter和点符号。 你会在google和SO上找到大量的信息
答案 1 :(得分:0)
我知道这不是您正在寻找的答案,但请尝试重新考虑您的应用。全局变量不是面向对象编程的最佳方式。
答案 2 :(得分:0)
创建GlobalVariable.h头类文件,并按如下方式定义以下外部文件
extern NSString * googleURL;
然后在你的实现GlobalVariable.m文件
#import "GlobalVariable.h"
NSString * googleURL = @"www.google.co.uk";
然后将该类导入到您想要使用它的任何位置。
答案 3 :(得分:0)
默认情况下,变量(在代码中定义)受到保护。您可以在2个变量之前添加@public关键字以使其公开,但不建议这样做。通常,您希望使用@property关键字
将这些属性公开为属性示例:
@interface SController : UIViewController {
@public
BOOL leftSide;
BOOL rightSide;
@protected
//other protected variables here
}