У меня в панели есть таймер, который я пытаюсь запустить каждую секунду, однако я не могу заставить его срабатывать.Я создаю свою панель следующим образом:
// Begin our sheet
[NSApp beginSheet: targetController.window
modalForWindow: self.window
modalDelegate: self
didEndSelector: nil
contextInfo: nil];
Затем в моем targetController у меня есть следующее:
- (void) awakeFromNib
{
NSLog(@"awakeFromNib.");
displayUpdateTimer = [NSTimer timerWithTimeInterval: 1.0
target: self
selector: @selector(updateDisplay:)
userInfo: nil
repeats: TRUE];
[[NSRunLoop currentRunLoop] addTimer: displayUpdateTimer
forMode: NSModalPanelRunLoopMode];
}
Насколько я понимаю, я делаю это правильно, добавляя таймер сNSModalPanelRunLoopMode
, но даже при этом мой updateDisplay: селектор никогда не срабатывает.
У кого-нибудь есть идеи по поводу того, что я здесь делаю неправильно?
Примечание: я также пытался NSDefaultRunLoopMode
но это не имело значения.Таймер все еще не был запущен.
Редактировать: Моя общая цель заключается в следующем -
Моя панель имеет табличное представление, в которое можно добавить несколько элементов одновременно (из нескольких потоков),Поэтому я добавляю элементы во временный массив, затем, когда срабатывает таймер, он добавляет элементы из временного массива в основной массив и перезагружает таблицу.Ниже приведены примеры кода, который делает это:
- (void) addOverwriteObject: (id) overwriteObject
{
@synchronized(newObjects)
{
// Add our overwrite object
[newObjects addObject: overwriteObject];
} // End of overwriteObject
} // End of addOverwriteObject
И метод, который срабатывает при обновлении таймера:
- (void)updateDisplay:(id)sender
{
@synchronized(newObjects)
{
if(newObjects.count > 0)
{
[overwriteObjects addObjectsFromArray: newObjects];
[newObjects removeAllObjects];
[tableView reloadData];
} // End of newObjects has entries
} // End of newObjects sync
} // End of updateDisplay
К сожалению, без срабатывания таймера я не получаю записей в таблице
Ниже приведен скриншот того, что я пытаюсь сделать (записи были добавлены непосредственно в основной массив.)