Поиск циклической ссылки

Я не могу скомпилировать свой проект для iPhone. В моем CType.h я получаю сообщение об ошибке:

Не удается найти объявление интерфейса для «NSObject», надкласса «CType».

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

Я читал, что это может быть связано с круговой ссылкой в ​​моем проекте. Поэтому я попытался изменить многие из моих импортов заголовков на предварительные объявления. Есть еще некоторые, которые мне еще не удалось сделать предварительным объявлением (например, если класс наследуется от другого класса, тогда ему нужен импорт, и если я использую делегата. Вероятно, есть способ обойти это).

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

ИЗМЕНИТЬ:

Это мой CType:

Интерфейс:

#import <Foundation/Foundation.h>

@interface CType : NSObject

/*
 * Type ID
 */
@property (nonatomic, assign) NSInteger typeId;

/*
 * Type
 */
@property (nonatomic, strong) NSString *type;

/*
 * Initialize with type ID and type
 */
- (id)initWithId:(NSInteger)typeId type:(NSString *)type;

/*
 * Type with type ID and type
 */
+ (CType *)typeWithId:(NSInteger)typeId type:(NSString *)type;

@end

Выполнение:

#import "CType.h"

@implementation CType

/* Create setters and getters */
@synthesize typeId;
@synthesize type;

/* Initialize with type ID and type */
- (id)initWithId:(NSInteger)_typeId type:(NSString *)_type
{
    if (self = [super init])
    {
        self.typeId = _typeId;
        self.type = _type;
    }

    return self;
}

/* Type with type ID and type */
+ (CType *)typeWithId:(NSInteger)typeId type:(NSString *)type
{
    return [[CType alloc] initWithId:typeId type:type];
}

@end

person simonbs    schedule 30.04.2012    source источник
comment
Я обновил свой вопрос, чтобы показать CType.   -  person simonbs    schedule 30.04.2012
comment
Пробовали чистить и восстанавливать? Кроме того, вы пытались назвать класс из CType как-то иначе?   -  person Michael Frederick    schedule 30.04.2012
comment
Является ли ваш модуль реализации расширением .m? Правильно ли настроен файл префикса? Мне кажется, что ваша среда сборки как-то испорчена. Работает ли более простой случай?   -  person Hot Licks    schedule 30.04.2012
comment
@MichaelFrederick Я безуспешно пытался очистить и восстановить. Я еще не пробовал переименовывать класс, но я не думаю, что CType каким-либо образом зарезервирован.   -  person simonbs    schedule 30.04.2012
comment
@HotLicks Моя реализация находится в .m-файле, да. Что вы имеете в виду под конфигурацией файла префикса и что вы имеете в виду под более простым случаем?   -  person simonbs    schedule 30.04.2012


Ответы (1)


Я склонен согласиться с @Hot Licks. Это вполне может быть поврежденный файл или неправильная конфигурация, потому что теоретически в вашем коде нет ничего плохого.

Вот что я бы предложил:

Создайте новый класс (с именем, отличным от CType) и перенесите свой код из CType в новый класс. Затем удалите старые файлы CType. Если в этот момент все работает, переименуйте свой новый класс в CType и посмотрите, что произойдет. Кроме того, дважды проверьте файл prefix.pch вашего приложения, чтобы увидеть, какие заголовки туда импортированы.

person Michael Frederick    schedule 30.04.2012
comment
Я понятия не имею, почему возникла эта ошибка. Я сделал, как вы предложили, создал новый файл с новым именем и переместил код из CType в новый класс. Нет ошибок. Переименование его в CType дает мне ошибки. Я рад, что это работает сейчас, но смущен, почему это произошло. - person simonbs; 30.04.2012
comment
Я предполагаю, что где-то есть #define вместо CType. Или это класс, определенный в чем-то, включенном в файл префикса. - person Hot Licks; 01.05.2012
comment
возможно, это совпадение, но я столкнулся с этим, когда CType и CTypeView были в проекте... не смог включить делегата в CTypeView, хотя щелкнул по нему и "показать объявление" работал нормально. Иди разберись. После переименования CType в BType все заработало нормально... - person MobileVet; 01.01.2014