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

Objective c 更改背景颜色时自定义NSView崩溃,objective-c,cocoa,nsview,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{

我有一个自定义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;
    }
}
当我在initWithFrame方法中使用
[self-isOnline:NO]
调用isOnline方法时,它工作得很好。但是,当我尝试使用以下命令从控制对象调用isOnline方法时:

[客户意见在线:是]
CustomedView.isOnline=是

它将在setBgColor方法的以下行崩溃:
bgColor=[theColor retain]编译器抱怨程序接收到信号:“EX_BAD_ACCESS”。我不明白为什么。那个自动释放错误了吗

如果是这样,我怎么能从控制对象调用[CustomedView setBgColor:aColor]和initWithFrame中的self,它会正常工作吗


有什么想法吗?

在颜色被销毁后,您正试图将
-retain
发送到
中。检查它是从哪里来的。

谢谢,就这样!我在initWithEfName中声明了两个NSColor变量,但忘记了保留它们。