我有以下课程:
@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方法获取Gamer卡,如下所示:
Card * moveCard = nil;
Card * selCard = card;
[mGamer GetCardForMove:moveCard actionCard:selCard];
GetCardForMove功能正常,找到并正确分配卡但Card * moveCard为零:(。 我是Objective-C的新手,有点困惑,请指出我的错误。
答案 0 :(得分:0)
实际上卡根本没有分配。如果您希望方法之外的代码能够看到卡片,请执行以下操作(更好的方法):
- (Card *)cardForActionCard: (Card *)selCard {
//stuff
return usefulCard;
}
或者这(与您当前的代码最相似):
- (BOOL)getCardForMove: (Card **)card actionCard: (Card *)selCard {
//stuff
if (card) {
*card = usefulCard;
}
return YES;
}
顺便说一句,这与你的问题无关,但是你的代码包含了一些关于内存管理的问题(我假设你有一个dealloc
方法,你处于一个保留计数的环境中)。无需在此处覆盖它们,只需运行“构建和分析”并修复它报告的问题。