2010-07-01 109 views
0

我有以下類:獲取實例變量?

@interface Gamer : CCNode { 
NSMutableArray * cards; 
} 
@property (nonatomic, retain) NSMutableArray * cards; 

+(id) CreatePlayer; 
-(BOOL)SetCardsArr:(NSMutableArray *) cs; 
-(BOOL)GetCardForMove:(Card*) card actionCard:(Card*)selCard; 
@end 

@implementation Gamer 

@synthesize cards; 

+(id) CreatePlayer 
{ 
return [[self alloc] init]; 
} 

-(BOOL) SetCardsArr:(NSMutableArray *) cs 
{ 
if (!cs) return NO; 
cards = [cs copy]; 
return YES; 
} 
-(BOOL)GetCardForMove:(Card*) card actionCard:(Card*)selCard; 
{ 
for (Card * curCard in cards) 
    { 
    if ([curCard GetCardSuit] == [selCard GetCardSuit]) 
      { 
     selCard = curCard; 
     break; 
    } 
} 
return YES; 
} 

-(id) init 
{ 
if(![super init]) return nil; 

return self; 
} 
- (void)dealloc 
{ 
[cards release]; 
[super dealloc]; 
} 
@end 

在我的主遊戲類我設置玩家陣列與SetCardsArr方法的幫助。 並且一些動作後,我試圖通過GetCardForMove方法這樣獲得玩家卡:

Card * moveCard = nil; 
    Card * selCard = card; 
[mGamer GetCardForMove:moveCard actionCard:selCard]; 

的GetCardForMove功能工作正常,發現卡並指定正常,但卡* moveCard爲零:( 我是新來的。 Objective-C和有點困惑,請給我指出我的錯誤

回答

0

實際上卡片根本沒有分配如果你想讓你的代碼在方法之外看到卡片,做這個(更好的方法) :

- (Card *)cardForActionCard: (Card *)selCard { 
    //stuff 
    return usefulCard; 
} 

或這個(最相似到您當前密碼):

- (BOOL)getCardForMove: (Card **)card actionCard: (Card *)selCard { 
    //stuff 
    if (card) { 
    *card = usefulCard; 
    } 
    return YES; 
} 

順便說一句,這是完全無關的問題,但你的代碼中包含了幾個關於內存管理(問題我假定你有一dealloc方法你處於保留計數環境)。無需在這裏覆蓋它們,只需運行「構建和分析」並修復它報告的問題。

+0

不 - 推薦通過引用(out參數)完全是錯誤的事情。不要這樣做! 「類似的代碼」是錯的!使用Graham建議的第一種方法。 – bbum 2010-07-01 22:32:44