2009-11-07 123 views
2

好吧我认为我对目标c中的属性的理解可能不是我认为的那样。为什么我的变量没有被赋值

在我的程序中,我有一个包含我的班级的单身人士。

在我的课程中,我在init中将单值赋给我的属性。

然后,我为该属性的属性分配一个值。

然而,它并没有保持这个值,当我做一个单身人士的价值比较没有任何改变。这里发生了什么?有任何想法吗?

@interface MainGameLoop : NSObject { 
    MapData *mapData; 
} 

@property (retain) MapData *mapData; 

-(id) init 
{ 
    self = [super init]; 
    GlobalVariables *sharedManager = [GlobalVariables sharedManager]; 
    self.mapData = sharedManager.mapData; 
    return self; 
} 

在我班上的一个功能:

作品:

sharedManager.mapData.currentPlayer = newCurrentPlayer; 

什么都不做:

self.mapData.currentPlayer == newCurrentPlayer; 
+0

我质疑GlobalVariables类的需要。首先,您不需要将所有内容都放入Objective-C中;你可以使真正的全局变量很好。 (将它们存储在单例中并不会使它们成为全局的或者更少的变量)。第二,为什么你甚至需要这个单例?为什么不让MainGameLoop对象(我可能会重命名为“游戏”或其他东西)拥有地图数据? – 2009-11-08 07:17:30

+0

另外,我争辩说你有“包含我的班级的单身人士[对象]”。除非对象动态创建调用者提供的类的实例(如NSObjectController和NSArrayController所做的那样),否则对象通常没有任何拥有类的理由。它看起来更像是你的单例拥有MapData类的*实例*。 – 2009-11-08 07:19:47

+0

你是对的,它只是拥有一个类的实例。我把它放在一个单例中,因为我不得不通过它的构造函数将mapdata实例传递给我所有的其他类,它开始感觉非常耗时。我怀疑这是做到这一点的最佳方式。 – Mel 2009-11-08 15:06:58

回答

14
self.mapData.currentPlayer == newCurrentPlayer; 

你确定要两个等号有?该语句在语法上是正确的,并且将评估为真或假。

+3

这是在构建设置中打开“未使用的值”警告的几个原因之一。 – 2009-11-08 03:03:21

+0

哇。当你刚刚对没有信心的事物感到兴奋时,这很有趣。各种疯狂的想法都在我脑海中流传,为什么会发生这种事情,事实证明这简直是疯狂的事情。谢谢! – Mel 2009-11-08 15:05:19

2

==是布尔运算符,而=是赋值运算符。就像Dave说的那样,如果你使用if这样的语句,比如if (self.mapData.currentPlayer == newCurrentPlayer) {…},你会想要使用==,因为它会评估为truefalse,而=将用于设置一个变量的值,这就是我认为你正在努力去做。

如果它的任何安慰,我做了错误太多次来算...

东西,我要做的就是用NSLog()printf(),以确保每一步工作正常。

相关问题