2012-04-02 84 views
2

我剛升級到Xcode版本4.3.2(4E2002)。我正在將手動內存管理的模擬類轉換爲ARC。將OCMock類轉換爲ARC時的前向聲明錯誤

的代碼看起來是這樣的:

@implementation OCProtocolMockObject 

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

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

的@interface看起來是這樣的:

@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中什麼也不做。有沒有其他的Protocol.h我不知道?

+0

「OCProtocolMockObject」的'@ interface'看起來像什麼? – 2012-04-02 20:46:24

+0

沒什麼特別的。已更新以包含它。 (OCMockObject也使用協議,但包括它也沒有) – nont 2012-04-02 20:55:32

+0

看來,協議只是最近宣佈的這些天。這導致了不同的問題,請參閱https://github.com/erikdoe/ocmock/pull/7上的評論我必須在我的Lion機器上升級到新版本才能再次檢查。 – 2012-04-05 10:34:54

回答

1

通過編譯沒有ARC的OCMock來解決。 (在每個OCMock源文件上使用-fno-objc-arc標誌)