我正在使用SGAREnvioroment,我收到以下错误:
“自我”时使用的实例变量未设置为“[(超级或自我)初始化...]”的结果
在这段代码中:
@interface SG3DOverlayView (Private)
- (id) initGLES;
- (void) drawView;
- (BOOL) createFramebuffer;
- (void) destroyFramebuffer;
- (void) clearTouches;
@end
@implementation SG3DOverlayView
+ (Class) layerClass
{
return [CAEAGLLayer class];
}
-(id) initWithFrame:(CGRect)frame
{
if(self = [super initWithFrame:frame]) {
self = [self initGLES];
}
return self;
}
-(id) initGLES
{
self.multipleTouchEnabled = YES;
self.exclusiveTouch = YES;
CAEAGLLayer *eaglLayer = (CAEAGLLayer*) self.layer;
eaglLayer.opaque = YES;
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:FALSE], kEAGLDrawablePropertyRetainedBacking,
kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat,
nil];
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if(!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer]) {
[self release];
return nil;
}
self.backgroundColor = [UIColor clearColor];
mainSubview = [[UIView alloc] initWithFrame:self.frame];
mainSubview.backgroundColor = [UIColor clearColor];
animationInterval = 1.0;
pinchTimer = nil;
dragging = NO;
currentSphereRadius = 0.0;
[self clearTouches];
return self;
}
我在这里得到“错误”:
if(!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer]) {
但是,正如您所看到的,自我设置在-(id) initWithFrame:(CGRect)frame
上,-(id) initGLES
是私有的,因此始终从-(id) initWithFrame:(CGRect)frame
调用。
那么,我可以做些什么来解决它吗?
答案 0 :(得分:9)
不要在函数名前加上init - 分析器假定它是初始化器,在这种情况下它不是。
此外,如果函数未初始化,则该函数不应返回self。让它无效。
答案 1 :(得分:1)
类似的问题/答案:
您的-(id)initGLES
看起来更像-(void)setupGLES
...