访问全局变量的问题?

时间:2013-04-02 13:03:33

标签: objective-c linker-errors

在我的DataCell.h中,我在interface:

之前声明了全局变量
extern NSInteger MYGlobalVariable;

在我的DataCell.m

我设置变量的值:

NSInteger MYGlobalVariable = 35;

在我的另一个类MyTableViewController.m

我导入了DataCell.h,然后尝试将int的值设置为标签。

_testLabel.text = [NSString stringWithFormat:@"%i" , MYGlobalVariable];

然而,当我尝试构建应用程序时,我得到错误:

  • 架构i386的未定义符号:“_ MYGlobalVariable”,引自:MyTableViewController
  • 错误:链接器命令失败,退出代码为1(使用-v查看调用)

3 个答案:

答案 0 :(得分:3)

根据你上面所说的,你做的一切都是正确的。这个,我怀疑上面的一个细节与你的代码不符。

extern声明是否与变量声明匹配? (例如,你没有意外地拼写它等等。)

.m中的变量声明是否意外地以static关键字为前缀?

你的NSInteger MyGlobalVariable = 35行实际上是在方法中吗?如果是这样,那只会声明该方法的局部变量。确保它不在任何花括号内;它应该浮动在文件的最外层。你可以把它放在@implementation块之前,如果有帮助的话。

如果没有一个修复它,那么您可能需要向我们展示您的实际代码,以便我们可以更好地了解出现了什么问题。

答案 1 :(得分:-2)

您不需要在DataCell.h文件中编写extern关键字。

只需在接口之前将其声明为NSInteger MYGlobalVariable;,然后在TableViewController.m文件中声明变量extern NSInteger MYGlobalVariable;

这会有效!

答案 2 :(得分:-2)

您需要通过执行以下操作将变量传递给类。

MyTableViewController.h

#import DataCell.h //At top...

@property (strong, nonatomic) DataCell *datacell;

MyTableViewController.m

@synthesize datacell;

_testLabel.text = [NSString stringWithFormat:@"%i" , dataCell.MYGlobalVariable];