2012-05-26 52 views
1

我有一些遊戲數據在我GameStateSingleton,我不想與顯式地檢索每一次,所以我問自己,是否有可能做這樣的事情:以更聰明的方式從單身人士獲取數據?

在我的類的接口文件,GameLayer我設置了屬性和變量,如sharedHealth

@interface GameLayer : CCLayer 
{ 
    int sharedHealth; 

} 
@property (nonatomic,assign) int sharedHealth; 

並且當然在實現中綜合它。

@synthesize sharedHealth; 

在GameLayer我的初始化願意做這樣的事情:

sharedHealth = [self getCurrentHealth]; 

,並添加相應的方法

-(int)getCurrentHealth{ 
    int myHealth = [[GameStateSingleton sharedMySingleton]getSharedHealth]; 
    return myHealth; 
} 

這可能嗎?從我所經歷的情況來看,我似乎碰到了崩潰。我如何實現我的目標,並不總是必須調用long方法,因爲它總是檢索相同的變量?必須有一個解決方案...

+0

這是因爲你錯誤地命名了getter方法而崩潰。放下「獲得」。否則,你有什麼好(儘管你可能想從「分配」改爲「只讀」)。 –

回答

2

你不需要一個實例變量。你可以只寫一個快捷功能如下:

- (int)sharedHealth { 
    return [[GameStateSingleton sharedMySingleton] getSharedHealth]; 
} 

何地你需要的價值,你叫[self sharedHealth]

您也可以使用預處理器宏。只要定義是:

#define SharedHealth [[GameStateSingleton sharedMySingleton] getSharedHealth] 

,然後簡單地使用,當你需要的價值。

請注意,在Objective-C中,您不會調用getter方法「getVariable」,而只需調用「variable」。大多數情況下這是一個慣例,但如果你開始使用KVCKVO這是一個你必須遵循的規則。所以最好儘快熟悉它。

+0

非常感謝:-) –

0

如果它只是你試圖避免重複輸入,你可以使用舊的C方式...

#define GAME_STATE [GameStateSingleton sharedMySingleton] 

...然後...

int localValue = [GAME_STATE property];