2

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 は次のようになります。

@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 はありますか?

4

1 に答える 1

1

ARC なしで OCMock をコンパイルすることで解決しました。(各 OCMock ソース ファイルで -fno-objc-arc フラグを使用)

于 2013-04-16T14:11:30.310 に答える