0

我是 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 和编程非常陌生,所以我很难理解这样的基本概念。我了解使用全局变量的潜在问题,但是这个程序非常小并且供个人使用。如果有人能告诉我要改变什么来实现这一点,那就太好了。

4

4 回答 4

1

就像其他人说的那样,不要为此(以及大多数其他)目的使用全局变量。

您创建了 iVar,为了访问它们,您需要将它们公开给其他对象。您通常通过在SControllers 头文件中定义 @properties 来做到这一点。这样做时,您不需要自己创建 iVar,它们是隐式创建的。访问 iVar 的方法也会自动创建(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 上找到大量信息

于 2013-07-01T21:02:00.440 回答
0

创建 GlobalVariable.h 头类文件并定义如下外部变量如下

extern NSString * googleURL;

然后在你的实现 GlobalVariable.m 文件中

#import "GlobalVariable.h"

NSString * googleURL = @"www.google.co.uk";

然后在任何你想使用它的地方导入这个类。

于 2013-07-01T21:42:31.337 回答
0

默认情况下,变量(在您的代码中定义)受到保护。您可以在 2 个变量之前添加 @public 关键字以使其公开,但不建议这样做。通常,您希望使用 @property 关键字将它们公开为属性

例子:

@interface SController : UIViewController {

    @public
    BOOL leftSide;
    BOOL rightSide;

    @protected
    //other protected variables here
}
于 2013-07-01T21:43:11.340 回答
0

我知道这不是您要寻找的答案,但请尝试重新考虑您的应用程序。全局变量不是面向对象编程的最佳方式。

于 2013-07-01T15:54:30.260 回答