gpt4 book ai didi

Objective-C::使用方法来改变对象

转载 作者:行者123 更新时间:2023-12-03 17:00:20 24 4
gpt4 key购买 nike

我有一个名为“CardSet”的类,其中包含一个 NSMutableArray* cardSet 来保存“卡片”,我将其扩展为“DeckCards”。我希望“CardSet”有一个名为“(void)addCard:(Card*)”的方法(以及类似的方法“removeCard”)。我想要“addCard”来了解如何访问和设置cardSet。更好的是我想使用“addCard”方法来初始化cardSet。类文件“CardSet.h”内容如下:

 #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 参数必须与返回值和相应的成员类型相同吗?

[我可以通过在“DeckCard”外部创建一个 NSMutableArray 对象“deck_cards_temp”来解决上述问题,向其中添加 52 张卡片,然后通过从“CardSet”继承的 setter 将其传递给我的“DeckCards”实例的成员”。这不太令人满意!]

你有什么建议?非常感谢您的帮助和耐心。

最佳答案

您实际上从未创建cardSet对象。您应该在 -init 方法中创建它:

-(id)init
{
if( self = [super init] )
{
cardSet = [[NSMutableArray alloc] init];
}
return self;
}

因为您从未实际创建数组,所以对 -addCard: 的所有调用都将发送到 nil 对象。

当您将数组传递给 -setCardSet: 时,您将传递一个已初始化的数组,因此该数组不再为零,并且 -addCard: 调用可以正常工作.

关于Objective-C::使用方法来改变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com