我有一个自定义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/