2

为了在不发布代码页面的情况下了解我在做什么...我有一个 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:再次被调用时,我jobViewArray是空的。这是我第一次尝试做这样的事情,所以我可能在这里做错了什么......我想这是不言而喻的,因为它不起作用吧?

4

1 回答 1

1

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

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

于 2011-07-12T23:59:00.567 回答