我有一个自定义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调用它呢?

有任何想法吗?

最佳答案

您正在尝试将-retain发送到theColor后销毁。检查它的来源。

关于objective-c - 更改背景颜色时自定义NSView崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6632714/

10-09 16:23