NSView并即时加载子视图

时间:2011-07-12 22:36:30

标签: objective-c cocoa nsview subviews

要了解我正在做什么而不发布代码页...我有一个NSOperation,我用它来处理文件,因为它们被添加到文件夹中。在那个NSOperation中,我正在使用NSNotificationCenter在新作业启动时向NSView发送通知。我的想法是,我想添加一个新的子视图,以便为我提供有关刚刚开始的工作的一些信息。问题是我似乎无法获得新的子视图。这就是我现在所拥有的。

- (void)drawRect:(NSRect)dirtyRect
{
    NSLog(@"Draw Count %i", [jobViewArray count]);
    int i = 0;
    while (i < [jobViewArray count]) {
        [self addSubview:[jobViewArray objectAtIndex:i]];
    }    

}

然后再往下走:

-(void) newJobNotification: (NSNotification *) notification
{
    if (!jobViewArray)
            jobViewArray = [[NSMutableArray alloc] init];
    ++jobCount;
    NSRect rect;
    rect.size.width = 832;
    rect.size.height = 120;
    NSPoint point = { 0, ((jobCount * 120) - 120) };
    rect.origin = point;
    ProgressView *newJob = [[ProgressView alloc] initWithFrame:rect];

    [jobViewArray addObject:newJob];    
    NSLog(@"Notice Count %i", [jobViewArray count]);

    }

}

当我使用我的应用程序添加作业时,我的NSView正确接收了通知,子视图已正确添加到jobViewArray,但是当drawRect:再次被调用时{{1} }} 是空的。这是我第一次尝试做这样的事情,所以我可能在这里做了一些完全错误的事情...我想这不用说因为它不起作用了吗?

1 个答案:

答案 0 :(得分:1)

您不应该将子视图添加到drawRect:中的视图中。当您收到通知时,您应该在那里添加子视图,因为第二次通知到来时,您将添加2个子视图,然后下一次3个子视图,然后添加一个。

如果你在通知中添加子视图,那么你就不需要乱用数组了。