更改背景颜色时自定义NSView崩溃

时间:2011-07-09 04:29:10

标签: objective-c cocoa nsview

我有一个自定义的NSView对象,其中包含一个名为bgColor的保留属性。我通过定义setBgColor方法覆盖了setter方法:

- (void)setBgColor:(NSColor *)theColor
{
    [bgColor autorelease];
    bgColor = [theColor retain];
    [self setNeedsDisplay:YES];
}

我还有另一个名为isOnline的函数:

-(void)isOnline:(BOOL)connected{
    if(connected){
        self.bgColor = onlineBackgroundColor;
    } else {
        self.bgColor = offlineBackgroundColor;
    }
}

当我使用[self isOnline:NO]在initWithFrame方法中调用isOnline方法时,它工作正常。但是当我尝试从控制对象调用isOnline方法时:

[theCustomedView isOnline:YES];theCustomedView.isOnline = YES;

它会在行的setBgColor方法中崩溃:bgColor = [theColor retain];编译器抱怨程序收到信号:“EX_BAD_ACCESS”。我无法弄清楚为什么。那自动释放错了吗?

如果是这样,为什么我可以从控制对象[theCustomedView setBgColor:aColor];和initWithFrame中的self调用它,它会正常工作?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您尝试在-retain被销毁后发送给theColor。检查它的来源。