我在面板中有一个计时器,我试图每秒触发一次,但是我似乎无法触发它。我正在创建我的面板,如下所示:
// 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
不幸的是,如果没有计时器触发,我在表中根本没有任何条目。
下面是我正在尝试执行的操作的屏幕截图(条目已直接添加到主数组中。)