gpt4 book ai didi

objective-c - 工作表窗口中的 NSTimer 未触发

转载 作者:行者123 更新时间:2023-12-03 16:47:35 24 4
gpt4 key购买 nike

我在面板中有一个计时器,我试图每秒触发它,但我似乎无法让它触发。我正在像这样创建面板:

// 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 但没有什么区别。计时器仍未启动。

编辑:我的总体目标如下 -

我的面板有一个表格 View ,可以一次添加许多项目(从多个线程)。因此,我将这些项目添加到临时数组中,然后当计时器触发时,它将临时数组中的项目添加到主数组中并重新加载表。以下是执行此操作的代码示例:

- (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

不幸的是,如果没有计时器触发,我在表中根本没有任何条目。

下面是我正在尝试执行的操作的屏幕截图(条目已直接添加到主数组中。)

enter image description here

最佳答案

您的代码似乎是正确的,运行循环可能存在问题。尝试使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:。

关于objective-c - 工作表窗口中的 NSTimer 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com