繁体   English   中英

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

[英]Static variable cannot be accessed from another class

我有一个静态变量,我想从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中声明的那个。

我假设.h文件中声明的静态变量在@interface之外。 所以类似于:

static NSString *myObjectTest = @"Test";

@interface MyObject : NSObject 
@end

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

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

要么

obj.myObject

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

只要导入.h文件,就可以像访问myObjectTest那样访问该静态变量

更新请参阅Chuck在下面的评论为什么这样做是个坏主意。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM