2013-05-18 2 views
-1

Теперь он работает, проблема была в Xcode.Это было решено перезапуском Xcode и попыткой чистой сборки, спасибо за попытку!Использование ключевого слова self для дочернего класса для вызова одного метода суперкласса в Objective-C

Родитель Класс

CardGame.h

#import <Foundation/Foundation.h> 
#import "Deck.h" 

@interface CardGame : NSObject 

- (id) initWithCardCount:(NSUInteger)cardCount usingDeck:(Deck *) deck; 

- (Card *) cardAtIndex: (NSUInteger) index; 

@end 

Детский класс

CardMatchingGame.h

#import "CardGame.h" 

@interface CardMatchingGame : CardGame 

- (void) flipCardAtIndex: (NSUInteger) index; 

@end 

CardMatchingGame.m

- (void) flipCardAtIndex: (NSUInteger) index { 
Card *card = [self cardAtIndex:index]; // The error I get is on this line 
self.currentAction = [NSString stringWithFormat:@"You flipped up %@", 
                 card.contents]; 

Я получаю ошибку

Нет видимых @interface для 'CardMatchingGame' заявляет о cardAtIndex селектора: (NSUInteger) индекс;

Я просматривал похожие вопросы, но ответ должен быть связан с тем, что дочерний класс не нашел правильный родительский файл, это не так для меня. Я новичок в наследовании, я делаю это неправильно?

+0

Как вы называете метод initWithCardCount: usingDeck: '? Класс импортирует 'CardMatchingGame.h'? «CardMatchingGame.h» импортирует «CardGame.h»? – rmaddy

+0

Извините за путаницу, я неправильно разместил ошибку, см. Редактирование. –

+0

Но 'CardMatchingGame.m' импортирует' CardMatchingGame.h' или 'CardGame.h'? – rmaddy

ответ

1

Вам необходимо импортировать CardGame.h. Если вы не импортируете его, компилятор жалуется, что он не может его найти, так как вы не ссылаетесь на него в своем коде подкласса.

Пример: тип import "CardGame.h" в верхней части CardMatchingGame.h

+0

Извините, я забыл набрать это в вопросах, я действительно импортировал это. –

+0

'@interface CardMatchingGame: CardGame' это неправильно, он должен наследовать от' NSObject', а не 'CardGame' – edwardmp

+0

Вам нужно импортировать Deck.h в CardMatchingGame.h, а не CardGame.h – edwardmp

0

Проблема, кажется, в вашей реализации cardAtIndex: - вы делаете какую-то ошибку в этом коде. Я предполагаю, что вы можете называть initWithCardCount: неправильным способом - возможно, как метод класса, когда на самом деле это метод экземпляра.

+0

Но это помогло бы, если бы вы на самом деле показали этот код, так как это, похоже, проблема. – matt