我有一个名为“CardSet”的类,其中包含一个用于容纳“卡片”的NSMutableArray * cardSet,我将其扩展为制作“DeckCards”。我想要“CardSet”有一个名为“(void)addCard:(Card *)”(以及类似的方法“removeCard”)的方法。我想要“addCard”,以便如何访问并设置cardSet。更好的是,我想使用“addCard”方法初始化cardSet。类文件 “CardSet.h” 记载:Objective-C ::使用方法更改对象
#import <Cocoa/Cocoa.h>
#import <Card.h>
@interface CardSet : NSObject {
NSMutableArray* cardSet;
}
-(id)init;
-(NSMutableArray*)getCardSet;
-(void)setCardSet:(NSMutableArray *)new_cardset;
-(Card*)getCard:(NSInteger) index;
**-(void)addCard:(Card*) new_card;**
-(void)removeCard:(Card*) old_card;
-(void)dealloc;
@property (readwrite, retain, getter=getCardSet, setter=setCardSet) NSMutableArray* cardSet;
@end
和方法文件读取:
#import "CardSet.h"
@implementation CardSet
-(id)init{
if(self = [super init]){} //will add initialisations here later
return self;
}
-(NSMutableArray*)getCardSet{
return cardSet;
}
-(void)setCardSet:(NSMutableArray *)new_cardSet{
cardSet = new_cardSet;
}
-(Card*)getCard:(NSInteger)index{
return [cardSet objectAtIndex:index];
}
**-(void)addCard:(Card *)new_card{
[cardSet addObject:new_card];
}**
-(void)removeCard:(Card *)old_card{
[cardSet removeObject:old_card];
}
-(void)dealloc{
[cardSet release];
[super dealloc];
}
@synthesize cardSet;
@end
这编译就好了。我想用它的“addCard”方法初始化一个“DeckCards”实例52次。当我在DeckCards setter方法中调用addCard 52次并询问其“cardSet”的大小时,我返回0.
这似乎是一个范围或特权问题? “addCard”方法是否具有setter特权?必须使用setter参数与返回和相应的成员类型相同?
[我可以通过在“DeckCard”之外创建一个NSMutableArray对象“deck_cards_temp”来解决上述问题,向其中添加52张卡片,并通过setter继承“DeckCards” CardSet”。这是不是很满意!]
你有什么建议?非常感谢您的帮助和耐心。
你或许应该还显示'DeckCards'源。 – 2010-03-01 01:53:54
请注意,您可以通过缩进4个空格或单击* code *按钮来创建代码块。 – 2010-03-01 01:57:05
您还应该将这些访问器方法重命名为符合KVC。有关完整列表,请参阅http://developer.apple.com/documentation/Cocoa/Conceptual/ModelObjects/Articles/moAccessorMethods.html;两个你应该改变'getCardSet'(应该只是'cardSet')和'getCard:'(应该是'objectInCardSetAtIndex:')。如果有任何事情(包括未来某天)会观察这个'cardSet'属性,这将为这些访问器启用自动KVO通知。 – 2010-03-01 02:04:43