NSView и загрузка подпредставлений на лету - PullRequest
2 голосов
/ 13 июля 2011

Чтобы получить представление о том, что я делаю, без публикации страниц кода ... У меня есть операция NSO, которую я использую для обработки файлов при их добавлении в папку. В этой операции NSO я использую 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 становится пустым. Это первый раз, когда я пытался сделать что-то подобное, так что я, вероятно, делаю что-то совершенно не так ... Я думаю, это само собой разумеется, поскольку это не работает, а?

1 Ответ

1 голос
/ 13 июля 2011

Вы не должны добавлять подпредставление к представлению в drawRect :.Когда вы получаете уведомление, вы должны добавить туда подпредставления, потому что во второй раз, когда приходит уведомление, вы собираетесь добавить 2 подпредставления, затем в следующий раз 3 подпредставления и так одно.

Если вы добавите подпредставлениев уведомлении вам не нужно возиться с массивом.

...