Objective c 添加子视图问题

Objective c 添加子视图问题,objective-c,addsubview,Objective C,Addsubview,我对objective-c的编码相当陌生,因为视图管理问题,我被困了几个小时。 基于Matt Gemmel RoudedFloatingPannel,我想显示一个带有半透明圆形背景的NSImage //CREATE THE TRANSPARENT WINDOW window = [[TransparentWindow alloc] initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingS

我对objective-c的编码相当陌生,因为视图管理问题,我被困了几个小时。 基于Matt Gemmel RoudedFloatingPannel,我想显示一个带有半透明圆形背景的NSImage

//CREATE THE TRANSPARENT WINDOW
window = [[TransparentWindow alloc] initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];  

//ADD THE ROUNDED BACKGROUND               
[window setContentView:[[RoundedView alloc] init]];

//GET RUNNING APPLICATION
NSArray *RunningApps = [[NSWorkspace sharedWorkspace] runningApplications];

//PREPARE TEST IMAGE VIEW
NSImage *image = [[RunningApps objectAtIndex:9] icon];
NSImageView *img = [[NSImageView alloc] init];
[img setImage:image];

//DISPLAY THE ICON                    
[[window contentView] addSubview:img];
似乎我做错了什么,因为我只显示背景。有人能帮我吗

提前谢谢。
盖尔。

首先,您正在泄漏一些对象:

 [window setContentView:[[RoundedView alloc] init]];
 ...
 NSImageView *img = [[NSImageView alloc] init];
这些应该自动释放


至于您的具体问题,我建议使用调试器逐步检查代码,并检查每个语句是否按预期执行(例如,您分配的所有对象都不是零)。这将有助于找出问题。

您的代码中有一些令人惊讶的地方

由于您显然是子类化了
NSWindow
TransparentWindow
?),因此您最好将其添加到一个属性中,您可以在alloc/init序列之后设置该属性

您还可以将此属性添加到您提供的
NSView
RoundedView
?)的表观子类中

您的评论表明您正在测试某个应用程序的
图标
属性。尝试将图像添加到捆绑包中,可以更轻松地加载以下内容:

[[NSBundle mainBundle] pathForResource:@"imageFilename"
                                ofType:@"png"];
,其中PNG格式当然是一个例子


希望这有帮助。

塞尔吉奥是对的,我必须管理我的视图框架:

NSImageView *img = [[[[NSImageView alloc] initWithFrame:[[window contentView] frame]] retain] autorelease];

嗨,谢谢你提醒我关于泄漏的事。我只是想做一个概念证明,我完全忘记了内存管理。关于您的建议,如果我将NSImageView添加为内容视图,然后添加roundedview,我只会看到NSImageView,这意味着我在尝试覆盖这两个视图时遇到问题。您是否检查了视图框架?您的圆形视图是什么样的视图?