将代码从Xcode 3移动到4会产生错误:无法在@interface或@protocol中声明变量

时间:2012-04-28 19:35:27

标签: objective-c xcode4 compiler-errors instance-variables class-extensions

我正在将旧的iPhone应用程序从Xcode 3迁移到Xcode 4.我在用于构建Xcode 3的代码上收到此错误 - 实际上我是故意这样写的,以隐藏其他模块的实现细节。但是,Objective-C似乎发生了一些变化。此代码现在收到错误

  

无法在@interface或@protocol中声明变量。

请记住,这是.m文件顶部的代码而不是.h

@interface VisualViewController ()
BOOL doReloadPhoto;

+ (void)buildVisualEffectInfo;

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

1 个答案:

答案 0 :(得分:9)

之前可能已编译过,但我不认为它正在做你认为它正在做的事情。听起来你想在类扩展中创建一个私有的ivar。你拥有的语法只是一个顶级变量,相当于:

BOOL doReloadPhoto;

@interface VisualViewController ()
// etc.
@end

你需要把它放在花括号内才能成为一个ivar:

@interface VisualViewController () 
{
    BOOL doReloadPhoto;
}

(相反,我不确定这个 - 扩展名为ivar - 是否可以使用Xcode 3的编译器,这可能就是为什么你这样做的原因。)听起来好像编译器现在(理智)指出你所拥有的代码可能没有达到预期的效果,并迫使你完全明确自己的意图。

最近也可以使用相同的语法在@implementation块中声明私有ivars:

@implementation VisualViewController
{
    BOOL doReloadPhoto;
}