【发布时间】:2011-08-28 04:58:50
【问题描述】:
我有一个自定义 UIVIewController,它是其他控制器的基类,并且有一个自定义 UIView 变量的实例,可以通过继承的类访问。
BaseViewController.h
@interface BaseViewController : UIViewController {
UIView *_vwHeader;
}
@end
BaseViewController.m
#import "BaseViewController.h"
@implementation BaseViewController
-(void)loadView {
[super loadView];
_vwHeader = [[UIView alloc] init];
}
@end
CustomViewController.h
#import "BaseViewController.h"
@interface CustomViewController : BaseViewController
@end
CustomViewController.m
#import "CustomViewController.h"
@implementation CustomViewController
- (void)loadView
{
[super loadView];
[_vwHeader setHidden:NO];
}
@end
问题是,当我在模拟器上运行它时,一切正常,但是当我更改为设备时,[_vwHeader setHidden:NO]; 行出现错误,上面写着:'_vwHeader' undeclared (first use in this function)
我已经尝试过:
- 注释这行代码,但是它在另一个类中使用基类中的变量以相同的方式给我一个错误(它一次只返回一个错误),所以它似乎不是一个特定的错误在视图或控制器类中,因为错误发生在具有不同类型的其他类中,例如
UIView和NSObject类型 - 更改目标编译器配置,例如:架构(全部)、基础 sdk(全部 4.0 以上)没有改变任何东西
什么似乎解决了问题,但不完全
- 为
_vwHeader创建一个属性并通过self._vwHeader或super._vwHeader访问它似乎可行,但是仅仅为了访问一个变量而必须创建一个属性并不能让我感到舒服,特别是因为我必须这样做对于我的项目中相同情况下的所有变量。 - 更改了 C/C++ 编译器版本:使用
Apple LLVM Compiler 2.1使编译错误消失,但在项目中使用其他库时会出现许多其他问题。因此,这不是一个确定的解决方案,但可能是问题所在的线索。
编辑:
我试图创建另一个不是指针的变量,一个BOOL而不是UIView *,然后在继承的类中使用它:问题也出现了
编辑(2):
我的任何课程都没有任何属性,但我仍然收到错误消息。 我刚刚添加了测试 porpouses 的属性,以查看父类中的属性是否导致相同的行为,显然它没有。 也很奇怪的是,当我在变量中得到错误时,我用我的智能感知检查并发现它......
【问题讨论】:
-
也许检查一下你的 xcode 模式发生了什么,即 BaseViewController.m 在 xcode 的目标成员面板中打勾
-
你能发布一个完整的 Xcode 项目来重现这个错误吗?
-
@vocaro 抱歉,它发生在一个拥有大量公司财产的公司中,我不知道如何在其他人身上复制它
标签: iphone objective-c ios xcode4 compiler-errors