2011-09-06 45 views
0

我在cocos2D中使用一個操作調用一個方法,並傳遞一個BOOL作爲參數。「使指針從整型沒有演員陣營」在Cocos2D爲iPhone

我得到警告: 「傳遞的參數3 'actionWithTarget:選擇:數據:' 使指針從整數,未作類型轉換」 這一行:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:flipChar]; 

我已經試過:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(BOOL)flipChar]; 

我的方法是這樣的:

-(void) characterReaction:(id)sender data:(BOOL)flipChar { 
    *code stuff inside* 
} 

它仍然似乎很好地工作。我只是被警告所困擾。有任何想法嗎?

回答

5

您將需要將您的flipChar包裝在NSNumber中以正確傳遞它作爲參考。使用選擇器時,不能直接傳遞基元類型。

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self 
           selector:@selector(characterReaction : data:) 
            data:[[NSNumber numberWithBool:flipChar] retain]]; 
... 

-(void) characterReaction:(id)sender data:(NSNumber*)flipChar { 
    BOOL fc = [flipChar boolValue]; 
    *code stuff inside* 
    [flipChar release]; //Retained in call to CCCallFuncND 
} 

編輯:在簡要查看文檔後,它看起來像需要void*。由於void*可以是任何對象,而不僅僅是一個Objective-C對象,所以您可能需要手動保留並釋放該數字。上面的代碼已更新。

+0

謝謝你,偉大工程! – VagueExplanation

0

您遇到的問題與您的characterReaction:data:方法無關,而與actionWithTarget:selector:data方法無關。

您傳遞的是什麼,我假設BOOL爲data:參數,但該方法需要一個指針(聲明的格式爲void *)。你應該改變你的方法來遵循這一點。嘗試傳入一個對象,並讓你的方法接受一個對象。

0

這個data: arg需要一個對象,而BOOL是一個簡單的值類型。要有效地通過BOOL,您需要創建一個對象,然後將其作爲調用您指定的選擇器的過程的一部分轉換回BOOL。您需要創建一個對象,該對象在轉換爲BOOL時包含任何值,以指示YES,對於NO則包含nil。您可以創建一個YESNSNumber

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(flipChar ? [NSNumber numberWithBool:YES] : nil)];