为了在不发布代码页的情况下了解我在做什么……我有一个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为空。这是我第一次尝试做这样的事情,所以我可能在这里做的事情完全错了。我想这没有说出来,因为它行不通了吧?

最佳答案

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

如果在通知中添加子视图,则无需弄乱数组。

关于objective-c - NSView和动态加载 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6672041/

10-13 03:44