2009-11-07 68 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(),以確保每一步工作正常。

相關問題