ProgressIndicator не обновляется примерно до 10 секунд после того, как awakeFromNib происходит - PullRequest
0 голосов
/ 18 марта 2010

Я пытался сделать так, чтобы этот раздел моего пользовательского интерфейса сразу обновлялся, когда документ загружался в поле зрения. AwakeFromNib запускает вставленный код и затем запускает таймер для повторения каждые 10 секунд ...

Я загружаю хранилище по умолчанию: ~ / Movies ..., которое отображается сразу ... однако сетевое местоположение, сохраненное в документе, извлеченном из XML, кажется, появляется только после второго запуска - (void) updateDiskSpaceDisplay timer.

Я установил точки останова и знаю, что ivars, который содержит значения, которые помещаются в * fileSystemAttributes, является сетевым местоположением в тот момент, когда происходит awakeFromNib ...

Я запутался, почему это волшебно появляется после второго запуска вместо того, чтобы сразу отображать значения записи.

   - (void)updateDiskSpaceDisplay
{
 // Obtain information about the file system used on the selected storage path.
 NSError *error = NULL;
 NSDictionary *fileSystemAttributes =  [[NSFileManager defaultManager] attributesOfFileSystemForPath:[[[self settings] containerSettings] storagePath] error:&error];

 if( !fileSystemAttributes ) return;

 // Get the byte capacity of the drive.
 long long byteCapacity = [[fileSystemAttributes objectForKey:NSFileSystemSize] unsignedLongLongValue];

 // Get the number of free bytes.
 long long freeBytes = [[fileSystemAttributes objectForKey:NSFileSystemFreeSize] unsignedLongLongValue];

 // Update the level indicator, and the text fields to show the current information.
 [totalDiskSpaceField setStringValue:[self formattedStringFromByteCount:byteCapacity]]; 
 [totalDiskSpaceField setNeedsDisplay:YES];

 [usedDiskSpaceField setStringValue:[self formattedStringFromByteCount:(byteCapacity - freeBytes)]];
 [usedDiskSpaceField setNeedsDisplay:YES];
 [diskSpaceIndicator setMaxValue:100];
 [diskSpaceIndicator setIntValue:(((float) (byteCapacity - freeBytes) / (float) byteCapacity) * 100.0)];
 [diskSpaceIndicator display:YES];
}

мысли

мой бодрствующий отNib:

- (void)awakeFromNib
{
     [documentWindow setAcceptsMouseMovedEvents:YES];
 [documentWindow setDelegate:self];

 [self updateSettingsDisplay];

 [self updateDiskSpaceDisplay];
 [self setDiskSpaceUpdateTimer:[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(updateDiskSpaceDisplay) userInfo:NULL repeats:YES]];

 [self setUpClipInfoTabButtons];

 [self performSelector:@selector(setupEngineController) withObject:NULL afterDelay:0.1];
}

Ответы [ 2 ]

1 голос
/ 18 марта 2010

awakeFromNib - это только уведомление вашего экземпляра о том, что его IBOutlets настроены, а не то, что приложение завершило запуск и готово к рисованию.

Попробуйте реализовать метод делегата NSApplication, applicationDidFinishLaunching: , и оттуда вызвать свой метод updateDiskSpaceDisplay.

0 голосов
/ 20 марта 2010

был метод чтения из xml, который происходил после моего awakeFromNib, который быстро изменял значения ... Я просто поместил updateDiskSpaceDisplay и ... проблема решена Спасибо всем за попытки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...