4

我正在将我的旧 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
4

1 回答 1

9

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

BOOL doReloadPhoto;

@interface VisualViewController ()
// etc.
@end

您需要将它放在花括号内才能成为 ivar:

@interface VisualViewController () 
{
    BOOL doReloadPhoto;
}

(相反,我不确定 Xcode 3 的编译器是否可以使用扩展中的 ivar,这可能就是为什么您按照您的方式进行操作的原因。)听起来编译器现在(明智地)指出您拥有的代码可能没有按照您的预期进行,并迫使您完全清楚地表达自己的意图。

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

@implementation VisualViewController
{
    BOOL doReloadPhoto;
}
于 2012-04-28T19:41:07.253 回答