2012-04-02 2 views
2

방금 ​​Xcode 버전 4.3.2 (4E2002)로 업그레이드했습니다. 난 모의 수업을 수동 메모리 관리에서 ARC로 변환하고있다.OCMock 클래스를 ARC로 변환 할 때 forward 선언 오류가 발생했습니다.

는 코드는 다음과 같습니다

@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'에 대한'@ 인터페이스 '는 어떻게 생겼습니까? –

+0

특별한 것은 없습니다. 그것을 포함하도록 업데이트되었습니다. (OCMockObject도 Protocol을 사용하지만 거기에는 아무것도 포함하지 않습니다.) – nont

+0

요즘 프로토콜은 요즘에만 선언되었습니다. 이로 인해 이전에 다른 문제가 발생했습니다. https://github.com/erikdoe/ocmock/pull/7에있는 의견을 참조하십시오. 내 라이온 시스템에서 새 버전으로 업그레이드해야 이중 확인이 가능합니다. –

답변

1

ARC없이 OCMock을 컴파일하여 해결되었습니다. (각 OCMock 소스 파일에 -fno-objc-arc 플래그 사용)

관련 문제