从另一个访问类变量的值 – objective-c

这可能是一个愚蠢的问题,但我很难尝试解决它。 问题是,有一个实现计数器的类,在它的结尾处,它调用另一个类控制的视图。 我想要做的是从第二个类访问第一类计数器的值。 我将计数器定义为属性并尝试从其他类访问它但我总是将其值设为0.任何人都可以帮助我吗?

谢谢。

我有的是这个:

Class1.h

@interface Class1 : CCLayerColor  { int movesCounter; } @property int movesCounter; @end 

Class1.m

 @implementation Class1 @synthesize movesCounter; //At this point the counter gets incremented and NSLogging its value correctly @end 

Class2.m

 #import Class1.h @implementation GameOverLayer -(id) init { if( (self=[super init])) { Class1 *theClass1 = [[Class1 alloc]init]; NSString *message = [NSString stringWithFormat:@"It took you %d moves.",theClass1.movesCounter]; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:message delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alert show]; [alert release]; } } 

我究竟做错了什么?

您的问题是您在Class2 init方法中创建了Class1的实例:

 Class1 *theClass1 = [[Class1 alloc] init]; 

这个新实例除了你已经成功递增的int之外,并且因为它是一个新的内存片段,moveCounter的值仍然是0.你真正想要的是指向Class1的特定副本的指针你一直在使用 – 不需要或不需要alloc / init。 尝试在Class2中创建一个可以保存指向Class1的指针的属性:

 #import "Class1.h" @interface Class2 : NSObject { Class1 *myPointerToClass1; } @property (nonatomic, retain) Class1 *myPointerToClass1; 

当然@synthesize myPointerToClass1在.2的.m中。 既然Class2已准备好保存指向Class1的指针,则只需填充它即可。 在Class1中,在alloc和init的Class2实例的代码之后,使用如下代码:

 myClass2.myPointerToClass1 = self; 

只是为了确保我没有忘记任何事情,我使用上面的代码做了所有这些,一切对我来说都很好。


编辑:原始答案从这里开始,但现在无关紧要…..你提到将计数器定义为属性,但是你是否也在实现(.m)文件中合成了实例变量?

 @synthesize myCounter; 

这将自动为您创建setter和getter方法。 另外,您是否validation过该值正在增加,可能是在viewcontroller中使用了NSLog语句?

 NSLog(@"myCounter is currently equal to %d", myCounter); // assuming an int 

如果涵盖了这些基础知识,也许您可​​以编辑您的问题以包含代码,向我们展示更多关于行为不端的类如何首先获得指向变量的指针。

在头文件中,您将iVar声明为

 { int movesCounter; } 

但是你用它来合成属性

 @synthesize movesCounter = _movesCounter; // note the underscore 

所以movesCounter iVar没有连接到movesCounter属性。 如果您只更新了movesCounter而不是self.movesCounter_movesCounter那么外部类将无法看到这些更改。