Iphone ';卡片';可能不响应'-Fadeway';
我有一个子类来自UIView的Card类和一个来自NSObject的Deck类。卡在继承的UIView属性之上有一些整数属性,并且卡组有一个NSMutableArray用于存放一些卡。生成一副卡片后,我想显示一张随机选择的卡片(通过将其添加到superview)。在我这么做之前,我检查是否已经有一张卡,我调用一个方法来释放它,然后再请求一张新卡。但我在标题中得到了警告。这是密码Iphone ';卡片';可能不响应'-Fadeway';,iphone,objective-c,xcode,warnings,Iphone,Objective C,Xcode,Warnings,我有一个子类来自UIView的Card类和一个来自NSObject的Deck类。卡在继承的UIView属性之上有一些整数属性,并且卡组有一个NSMutableArray用于存放一些卡。生成一副卡片后,我想显示一张随机选择的卡片(通过将其添加到superview)。在我这么做之前,我检查是否已经有一张卡,我调用一个方法来释放它,然后再请求一张新卡。但我在标题中得到了警告。这是密码 我是一个编程初学者(除了Basic!),所以我仍然对整个对象的事情绞尽脑汁。感谢您的帮助和/或建议 编辑: 这是卡
我是一个编程初学者(除了Basic!),所以我仍然对整个对象的事情绞尽脑汁。感谢您的帮助和/或建议 编辑: 这是卡片和卡片组代码
#导入
#导入“Card.h”
@舱面;
@接口组:NSObject{
NSM可变阵列*卡;
}
@属性(非原子,保留)NSMutableArray*卡;
-(id)initDeckWithOperator:(NSString*)mathOper;
-(id)newCardFromDeck;
@结束
#导入“Deck.h”
@实现平台
@合成卡片;
-(id)initDeckWithOperator:(NSString*)mathOper{
如果(卡片!=零){
[发牌];
}
卡片=[[NSMutableArray alloc]init];
对于(int i=0;i您需要给aCard
一个(id)发送方,正如您在参数中所述。您没有给出足够的参数,换句话说。您需要给aCard
一个(id)发送方
如您在参数中所述。您没有提供足够的参数,换句话说。您声明fadeAway
为接受类型为id
的单个参数,因此您必须这样调用它。因此:
[aCard fadeAway:nil];
另外,由于它的参数从来没有做过任何事情,您可以简单地声明它没有接受参数,然后按原样调用它。因此:
-(void)fadeAway;
// later
[aCard fadeAway];
您将fadeAway
声明为使用类型为id
的单个参数,因此必须这样调用它。因此:
[aCard fadeAway:nil];
另外,由于它的参数从来没有做过任何事情,您可以简单地声明它没有接受参数,然后按原样调用它。因此:
-(void)fadeAway;
// later
[aCard fadeAway];
您已经为FlashTestViewController
类定义了fadeAway
方法,而不是Card
类。这意味着您只能根据Card
类的实例调用此方法(或发送消息,具体取决于您首选的OOP术语)
因此,[aCard fadeAway]
是不正确的,因为它采用了错误数量的参数,但也因为aCard是一个卡片
类实例,并且没有为该类定义fadeAway:
方法(我们看不到它的定义,所以可能是这样,但显然不是这样)
但是您没有显示Card
类的定义,所以您可能在那里定义了方法。您已经为FlashTestViewController
类定义了fadeAway
方法,而不是Card
类。这意味着您只能调用此方法(或根据您首选的OOP术语发送消息)在卡
类的实例上
因此,[aCard fadeAway]
是不正确的,因为它采用了错误数量的参数,但也因为aCard是一个卡片
类实例,并且没有为该类定义fadeAway:
方法(我们看不到它的定义,所以可能是这样,但显然不是这样)
但是您没有显示卡
类的定义,所以您可能确实在那里定义了方法。为什么,您需要(id)发送方
,只是好奇?不太确定。我的逻辑是,我需要将aCard实例发送到该方法,以便它知道要发布什么。为什么,您需要(id)发送方sender
只是好奇?不太确定。我的逻辑是我需要将aCard实例发送给该方法,以便它知道要发布什么。我在Card类中没有FadeWay方法。我仍然对不同的功能位应该放在哪里感到困惑。我认为解除卡的方法应该放在控件中r、 但也许它应该在卡片类中。我会发布我的卡片和卡片代码作为答案。实际上-我会编辑原始问题,因为友好的网站向我建议…=)我将fadeAway方法放入了Card类中,没有发送者,-瞧!它起作用了!当我构建卡片组时,我使用随机数来确定框架的x和y位置,每次你点击New Card按钮,旧的卡片就会消失,而新的卡片会出现在其他地方。现在,让它真正褪色,并将内容放入其中UIView。非常感谢您的帮助!!!我会投票支持答案,但我还没有足够的声誉。@Steve:“我仍然对不同的功能应该放在哪里感到困惑”.Apple为GUI应用程序推出模型-视图-控制器模式。如果您希望遵循批准的模式,您可以将用于在屏幕上呈现卡的代码(例如淡出)和用于扑克牌逻辑抽象的代码分离为单独的类。您将有一个卡类(模型)和一个CardView类(视图)。-fadeAway将进入CardView。我明白了-我一直在试图理解MVC的东西,但这需要时间来理解。我从未想过将卡的代码分成两部分。我一直在考虑“卡对象”,我认为“卡对象”必须是MV或C,但不是M和V都是。这是很难的东西,但很有趣。再次感谢你的指导-如果没有它我会放弃的!我在Card类中没有fadeAway方法。我仍然对不同的功能应该放在哪里感到困惑。我认为应该在控制器中放一个弃卡的方法,但可能它是我将在卡片类中。我将发布我的卡片和卡片代码作为答案。实际上-我将编辑原始问题,因为友好的网站向我建议…=)我将fadeAway方法放入卡片类中,而没有
#import <Foundation/Foundation.h>
#import "Card.h"
@class Deck;
@interface Deck : NSObject {
NSMutableArray* cards;
}
@property(nonatomic, retain) NSMutableArray* cards;
- (id)initDeckWithOperator: (NSString*)mathOper;
- (id)newCardFromDeck;
@end
#import "Deck.h"
@implementation Deck
@synthesize cards;
- (id)initDeckWithOperator: (NSString*)mathOper {
if (cards != nil) {
[cards release];
}
cards = [[NSMutableArray alloc] init];
for (int i=0; i<11; i++) {
for (int j=0; j<11; j++) {
Card* aCard = [[Card alloc] initWithFrame:CGRectMake(10, 10, 60, 80)];
aCard.upperOperand = i;
aCard.lowerOperand = j;
aCard.theOperator = mathOper;
aCard.theResult = i + j;
[cards addObject: aCard];
[aCard release];
}
}
return self;
}
- (id)newCardFromDeck {
int index = random() % [cards count];
Card* selectedCard = [[cards objectAtIndex:index] retain];
[cards removeObjectAtIndex:index];
return selectedCard;
}
@end
[aCard fadeAway:nil];
-(void)fadeAway;
// later
[aCard fadeAway];