5

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

“在‘​​yy’类型的对象上找不到属性‘xx’”

我在.h 中将变量声明为extern,并在.m 中将其重新声明为变量类型。我试图在 .h 中将其更改为静态,但它仍然不起作用。是的,我已经导入了包含变量的文件,以防万一。

谁能帮我?

编辑:

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

源码.h

static int anObject;

@interface source : NSObject

来源.m

static int a = 2

@implementation source

目的地.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中声明的那个。

4

3 回答 3

8

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

static NSString *myObjectTest = @"Test";

@interface MyObject : NSObject 
@end

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

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

或者

obj.myObject

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

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

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

于 2012-08-22T17:04:30.177 回答
4

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

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

于 2012-08-22T17:03:11.317 回答
-1

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

于 2012-08-22T16:51:35.760 回答