2012-04-02 88 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标志)