无法从另一个类访问静态变量

时间:2012-08-22 16:46:30

标签: objective-c variables static

我有一个静态变量,我想从X-Code中同一项目中的另一个类访问。我已经在.h文件和.m文件中声明它,给它一个值,然后当我访问另一个类时,我收到一条错误消息说:

在'yy'类型的对象上找不到属性'xx'

我在.h中将变量声明为extern,并将其重新声明为.m中的变量类型。我试图在.h中将其更改为静态,但它仍然无法正常工作。是的,我已导入包含变量的文件,以防出现问题。

任何人都可以帮助我吗?

编辑:

这是我目前正在使用的代码:

source.h

static int anObject;

@interface source : NSObject

source.m

static int a = 2

@implementation source

destination.m

# include "source.h"

@implementation destination

- (void) anObjectTestFunction 

{     
  printf("%d", source.anObject); //the first version
  printf("%d", anObject); //second version  
}

现在我进入第二个版本后,可以访问destination.h中的变量anObject,但它的值不是2,它是0.我希望它遵循我在source.h中声明的那个。

3 个答案:

答案 0 :(得分:8)

我假设.h文件中声明的静态变量在@interface之外。如下所示:

static NSString *myObjectTest = @"Test";

@interface MyObject : NSObject 
@end

如果是这种情况,那么您将无法使用以下内容访问它:

MyObject *obj = [[MyObject alloc] init];
[obj myObject]

obj.myObject

这就是在'yy'类型的对象上找不到“属性'xx'的原因。”该静态变量不是MyObject对象的属性。

只要导入.h文件

,就可以像myObjectTest那样访问该静态变量

<强>更新 请参阅Chuck的评论,为什么这样做是个坏主意。

答案 1 :(得分:3)

您似乎对静态变量的含义感到困惑。在Java或C ++等其他语言中,“静态”可能意味着两件事之一。在文件或函数范围中,它表示一个变量,该变量作用于程序整个生命周期中存在的文件或函数。在类范围中,它仅表示类变量。

C ++有两个定义,Java只有第二个定义,但Objective-C只有第一个定义:静态变量只能在声明它的地方使用。没有“外部静态”变量这样的东西,因为这两者是矛盾的。您可能想要一个全局变量或一个带有类方法的静态变量来访问它。

答案 2 :(得分:-1)

这可能是命名空间问题吗?尝试完全限定您的访问权限。发布你的代码摘录确实会有所帮助,我不擅长千里眼: - )

相关问题