4

Xcode 3에서 Xcode 4로 이전 iPhone 응용 프로그램을 마이그레이션하고 있습니다. Xcode 3에서 빌드하는 데 사용 된 코드에서이 오류가 발생합니다. 실제로 다른 모듈에서 구현 세부 사항을 숨기기 위해이 방법으로이 코드를 작성했습니다. 그러나 Objective-C에서 뭔가가 변경된 것 같습니다. 이 코드는 지금Xcode 3에서 4로 코드를 이동하면 오류가 발생합니다. @interface 또는 @protocol에서 변수를 선언 할 수 없습니다.

Cannot declare variable inside @interface or @protocol.

가 기억 오류를 수신, 이것은하는 .m 파일이 아닌이 이전에 컴파일 할 수

@interface VisualViewController() 
BOOL doReloadPhoto; 

+ (void)buildVisualEffectInfo; 

@property (nonatomic, retain) HandleCheckListSetting *checkListHandler; 
@end 

답변

9

.H 상단의 코드는,하지만 난 그것을 생각하지 않는다 당신이하고 있다고 생각하는 것을하고있었습니다. 클래스 익스텐션에서 개인 ivar을 만들고 싶습니다. 반대로

@interface VisualViewController() 
{ 
    BOOL doReloadPhoto; 
} 

(내가 : 그것이 바르 될 수 있도록

BOOL doReloadPhoto; 

@interface VisualViewController() 
// etc. 
@end 

당신은 괄호 안에 넣어해야합니다 당신이 구문은 단지 최상위하지만, 변수와 동일 확장 기능의 ivar이 Xcode 3의 컴파일러에서 가능하다는 것을 확신하지 못했습니다. 아마도 당신이했던 것과 같은 이유 일 것입니다.) 컴파일러가 현시점에서 아마 당신이 기대하는 바를하지 않고, 당신이 당신의 의도를 완전히 분명히하도록 강요합니다.

또한 recenty 동일한 구문을 사용하여 @implementation 블록에 전용 인스턴스 변수를 선언 할 수있게했습니다

@implementation VisualViewController 
{ 
    BOOL doReloadPhoto; 
} 
+0

당신이 구현에 지금 할 수있는 몰랐다 우와. 멋지다. –

+2

@Jack : 이것은 실제로 현재 Apple에서 권장하는 방법입니다. 나는 그것을 좋아한다. 그것은 백만 시간 더 의미가 있습니다; ivars는 실제로 인터페이스가 아니라 구현의 일부입니다. –

+0

@JacquesCousteau +1. 나도 몰랐다. 매일 새로운 것을 배웁니다. ;) –