Cocoa:NSView没有绘制rect

时间:2011-03-11 14:03:57

标签: cocoa nsview

我有一个名为ServerImage(NSView的子)的类,我从AppController调用它但由于某种原因它不会绘制到屏幕上。我有其他观点,我能够绘制和添加图像,但由于某种原因不是这一个。我确定我在代码中遗漏了一些东西,但我只是没有看到它。这是来自AppController的相关代码:

//loop through masterServerDict and get server status   
NSMutableString* key; 
for(key in masterServerDict) { 

    ServerImage* newImage = [[ServerImage alloc] initWithFrame:NSMakeRect(200.0, 0.0, 48.0, 48.0)];

    [newImage setServerName:key];
    [[[NSApp mainWindow] contentView] addSubview:newImage];
    [newImage setNeedsDisplay:YES];


}

masterServerDict是一个可变字典,键是服务器的名称,对象是一个数组,它保存服务器的smb和afp路径以及它是否已挂载。

这是ServerImage.h

#import <Cocoa/Cocoa.h>


    @interface ServerImage : NSView {

        NSString * serverName; 
    }

    - (void) setServerName : (NSString* ) s; 

@end

和ServerImage.m

#import "ServerImage.h"


@implementation ServerImage

    - (id)initWithFrame:(NSRect)frame {

        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code here.
            NSLog(@"%f", self.frame.origin.x);
        }

        return self;
    }

- (void)drawRect:(NSRect)rect {
    NSLog(@"drawrect");
    [[NSColor redColor] set]; 
    NSRectFill(rect);
}

- (void) setServerName : (NSString* ) s { 
    NSLog(@"method");
    serverName = s; 

}

我可以使用init和setServerName方法来记录而不是drawRect ...

1 个答案:

答案 0 :(得分:0)

检查[[NSApp mainWindow] contentView]是否为非零。同时检查它是否引用了正确的窗口并且坐标是否良好(可见)。