Iphone ';卡片';可能不响应'-Fadeway';

Iphone ';卡片';可能不响应'-Fadeway';,iphone,objective-c,xcode,warnings,Iphone,Objective C,Xcode,Warnings,我有一个子类来自UIView的Card类和一个来自NSObject的Deck类。卡在继承的UIView属性之上有一些整数属性,并且卡组有一个NSMutableArray用于存放一些卡。生成一副卡片后,我想显示一张随机选择的卡片(通过将其添加到superview)。在我这么做之前,我检查是否已经有一张卡,我调用一个方法来释放它,然后再请求一张新卡。但我在标题中得到了警告。这是密码 我是一个编程初学者(除了Basic!),所以我仍然对整个对象的事情绞尽脑汁。感谢您的帮助和/或建议 编辑: 这是卡

我有一个子类来自UIView的Card类和一个来自NSObject的Deck类。卡在继承的UIView属性之上有一些整数属性,并且卡组有一个NSMutableArray用于存放一些卡。生成一副卡片后,我想显示一张随机选择的卡片(通过将其添加到superview)。在我这么做之前,我检查是否已经有一张卡,我调用一个方法来释放它,然后再请求一张新卡。但我在标题中得到了警告。这是密码



我是一个编程初学者(除了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];