2011-03-11 61 views
1

我有一个名为ServerImage(NSView的子)的类,我从我的AppController调用,但由于某种原因它不会画到屏幕上。我有其他意见,我可以绘制和添加图像,但由于某种原因不是这一个。我确定我在代码中丢失了一些东西,但是我没有看到它。下面是从AppController的相关代码:可可:NSView没有绘制矩形

//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

回答

0

检查[[NSApp mainWindow] contentView]是非零。同时检查它是否指向右侧窗口,并且坐标是否正确(可见)。

+0

检查[[NSApp mainWindow] contentView]是否为非零 - 我只是记录它?我从AppController记录了它并得到了(null),但我不知道我应该期待看到什么。 – PruitIgoe 2011-03-11 14:13:56

+0

你也可以声明它:'assert([NSApp mainWindow]!= nil);' – 2011-03-11 14:16:07

+0

该应用程序是1000x610,没有翻转,因此x = 200.0,y = 0.0的坐标很好,应该在左下角的某处。只有一个窗口,我使用默认引用(mainWindow)。 – PruitIgoe 2011-03-11 14:17:25