“self”时使用的实例变量未设置为结果

时间:2011-11-24 10:35:04

标签: iphone objective-c ios self

我正在使用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调用。

那么,我可以做些什么来解决它吗?

2 个答案:

答案 0 :(得分:9)

不要在函数名前加上init - 分析器假定它是初始化器,在这种情况下它不是。

此外,如果函数未初始化,则该函数不应返回self。让它无效。

答案 1 :(得分:1)