Xcode: очень странная ошибка при создании подкласса для моего собственного класса - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть приложение для iPhone с пользовательским классом, Detail, подклассом UIViewController, который я создал.

Мне нужно сделать подкласс Detail, и я хочу назвать его ActivityDetail. Поэтому я написал следующее в файле ActivityDetail.h:

#import <UIKit/UIKit.h>
#import "Detail.h"

@interface ActivityDetail : Detail {

}

@end

Проблема в том, что я получаю сообщение об ошибке компилятора:

ошибка: не удается найти интерфейс декларация для 'Detail', суперкласс 'ActivityDetail'

И странная вещь: я могу изменить суперкласс с Detail на UIView (например), скомпилировать, получая много ошибок (очевидно), а затем снова изменить суперкласс на Detail, и все работает отлично! Но если я потом что-то поменяю на класс Detail, проблема вернется с самого начала ...

Как я могу решить это?

Ответы [ 4 ]

8 голосов
/ 28 апреля 2011

Рекомендуется не импортировать классы за пределы импорта Foundation или UIKit по умолчанию в заголовочных файлах.Вместо этого вы должны сделать что-то похожее:

Заголовок

#import <UIKit/UIKit.h>

@class Detail;

@interface ActivityDetail : Detail {

}

@end

Реализация

#import "ActivityDetail.h"
#import "Detail.h"

@implementation ActivityDetail

@end

Это позволяет вашему заголовку «знать» о дополнительных классах, не заставляя всех «импортеров»этого заголовка, чтобы также импортировать все, что он импортирует.


Вот отличный справочный вопрос и отличный ответ, касающийся использования @class и #import.

8 голосов
/ 28 апреля 2011

Erm вы импортируете деталь как Dettaglio.h.Вероятно, компилятор не владеет итальянским языком.

0 голосов
/ 28 апреля 2011

Либо #import "Detail.h", либо подкласс из Dettaglio (зависит от того, какой из них на самом деле называется вашим классом Detail.

0 голосов
/ 28 апреля 2011

Импортируете ли вы .h, где объявлена ​​деталь?

  #import "Detail.h"
...