ошибка прямого объявления при преобразовании класса OCMock в ARC - PullRequest
2 голосов
/ 03 апреля 2012

Я только что обновился до версии Xcode 4.3.2 (4E2002).Я конвертирую фиктивный класс из ручного управления памятью в ARC.

Код выглядит так:

@implementation OCProtocolMockObject

- (id)initWithProtocol:(Protocol *)aProtocol
{
    [super init];
    mockedProtocol = aProtocol;
    return self;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"OCMockObject[%s]", [mockedProtocol name]];
}

Интерфейс @ выглядит так:

@interface OCProtocolMockObject : OCMockObject 
{
    Protocol    *mockedProtocol;
}

Компилятор жалуется, что:

 "Receiver type 'Protocol' for instance message is a forward declaration".

"mockedProtocol" выделен в методе описания.

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

Однако единственный «Protocol.h», который я могу найти, это

#import <objc/Protocol.h>

Импорт этого ничего не делает.Кроме того, добавление импорта в OCProtocolMockObject.h ничего не делает.Есть ли какой-то другой протокол? О котором я не знаю?

1 Ответ

1 голос
/ 16 апреля 2013

Решено путем компиляции OCMock без ARC.(используйте флаг -fno-objc-arc в каждом из исходных файлов OCMock)

...