要了解我正在做什么而不发布代码页...我有一个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} }} 是空的。这是我第一次尝试做这样的事情,所以我可能在这里做了一些完全错误的事情...我想这不用说因为它不起作用了吗?
答案 0 :(得分:1)
您不应该将子视图添加到drawRect:中的视图中。当您收到通知时,您应该在那里添加子视图,因为第二次通知到来时,您将添加2个子视图,然后下一次3个子视图,然后添加一个。
如果你在通知中添加子视图,那么你就不需要乱用数组了。