Fel*_*ino 11 iphone compiler-errors objective-c ios xcode4
我有一个自定义的UIVIewController,它是其他控制器的基类,并且有一个自定义UIView变量的实例,可以通过继承这些类来访问它.
BaseViewController.h
@interface BaseViewController : UIViewController {
UIView *_vwHeader;
}
@end
Run Code Online (Sandbox Code Playgroud)
BaseViewController.m
#import "BaseViewController.h"
@implementation BaseViewController
-(void)loadView {
[super loadView];
_vwHeader = [[UIView alloc] init];
}
@end
Run Code Online (Sandbox Code Playgroud)
CustomViewController.h
#import "BaseViewController.h"
@interface CustomViewController : BaseViewController
@end
Run Code Online (Sandbox Code Playgroud)
CustomViewController.m
#import "CustomViewController.h"
@implementation CustomViewController
- (void)loadView
{
[super loadView];
[_vwHeader setHidden:NO];
}
@end
Run Code Online (Sandbox Code Playgroud)
问题是,当我在模拟器上运行时,一切都运行得很好,但是当我换到设备时,我[_vwHeader setHidden:NO];在行上有一个错误,上面写着:'_vwHeader' undeclared (first use in this function)
我已经尝试过:
UIView和NSObject类型什么似乎解决了这个问题,但并不完全
_vwHeader通过self._vwHeader或super._vwHeader似乎工作创建属性并访问它,但是必须创建一个属性才能访问变量并不能让我感到舒适,特别是因为我必须为我项目中相同情况下的所有变量执行此操作.Apple LLVM Compiler 2.1会使编译错误消失,但是在项目中使用的其他库会产生一些其他问题.因此,它不是一个明确的解决方案,但可能是问题所在的线索.编辑:
我试图创建另一个不是指针的变量,BOOL而不是UIView * 它,然后在继承的类中使用它:问题也会发生
编辑(2):
我的任何课程都没有任何属性,但我仍然得到错误.我刚刚添加了测试porpouses的属性,以查看父类中的属性是否导致相同的行为,显然它没有.一些奇怪的事情是,当我在变量中得到错误时,我检查了我的intellisense它发现它...
为了引用除self(包括)之外的任何对象中的实例变量super,必须使用结构指针operator(->).实例变量的默认范围是受保护的,这意味着它只能在其定义的类或该类的子类中访问.由于CustomViewController是的子类BaseViewController,这个范围足以访问使用变量self->_vwHeader,但如果你试图从做这个第二类是不是一个子类,你还需要将范围更改为@public或@package.
总之,将方法调用更改为:
[self->_vwHeader setHidden:NO];
Run Code Online (Sandbox Code Playgroud)
它应该适用于基本视图控制器的任何子类.
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |