2010-07-01 76 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