У меня есть класс под названием «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
Это компилируется нормально. Я хотел бы инициализировать экземпляр «DeckCards», используя его метод «addCard» 52 раза. Когда я вызываю addCard 52 раза в методе setter DeckCards и запрашиваю размер его «cardSet», я возвращаюсь 0.
Это проблема с областью или привилегиями? Может ли метод «addCard» иметь какие-либо привилегии setter? Должен ли параметр setter быть таким же, как возвращаемый и соответствующий тип члена?
[Я могу обойти выше, создав объект NSMutableArray «deck_cards_temp» за пределами «DeckCard», добавьте к нему 52 карты и передайте его, чтобы установить член моего экземпляра «DeckCards» через установщик, унаследованный от " CardSet». Это не очень хорошо!]
Что вы посоветуете? Большое спасибо за вашу помощь и терпение.
Вы, вероятно, следует также показать источник для 'DeckCards'. –
Обратите внимание, что вы создаете кодовые блоки, отступы на 4 пробела или нажав кнопку * code *. –
Вы должны также переименовать эти методы доступа как KVC-совместимые. Для получения полного списка см. Http://developer.apple.com/documentation/Cocoa/Conceptual/ModelObjects/Articles/moAccessorMethods.html; два, которые вы должны изменить: 'getCardSet' (должно быть просто' cardSet') и 'getCard:' (должно быть 'objectInCardSetAtIndex:'). Это позволит автоматическое уведомление KVO для этих устройств доступа, если что-либо когда-либо (включая когда-нибудь в будущем) наблюдает за этим свойством 'cardSet'. –