我有一个静态变量,我想从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中声明的那个。
答案 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)
这可能是命名空间问题吗?尝试完全限定您的访问权限。发布你的代码摘录确实会有所帮助,我不擅长千里眼: - )