在 XCode 3.1.1 中为 OSX 10.5.8 目标、32 位和 i386 构建编译。
我有一个模态运行循环,在 NSWindow wloop 和 NSView vloop 中运行。模态循环首先启动。它按预期启动、运行和停止。这是开始:
[NSApp runModalForWindow: wloop];
然后,当用户按下鼠标左键时,我这样做:
if (ticking == 0) // ticking is set to zero in its definition, so starts that way
{
ticking = 1; // don't want to do this more than once per loop
tickCounter = 0;
cuckCoo = [NSTimer scheduledTimerWithTimeInterval: 1.0f / 10.0f // 10x per second
target: self // method is here in masterView
selector: @selector(onTick:) // method
userInfo: nil // not used
repeats: YES]; // should repeat
}
检查调用的返回,我确实得到了一个定时器对象,并且可以确认定时器调用是在我期望的时候进行的。
现在,根据文档,全局存储为“cuckCoo”的生成的 NSTimer 应该自动添加到当前的运行循环中。当前的运行循环绝对是模态的——此时其他窗口被锁定,只有具有预期鼠标操作的窗口正在接收消息。
它调用的方法“onTick”非常简单(因为我无法启动它),位于 vloop NSView 代码中,这就是所有这些发生的地方:
- (void) onTick:(NSTimer*)theTimer
{
tickCounter += 1;
NSLog(@"Timer started");
}
然后,当需要停止模态循环(工作正常,顺便说一句)时,我这样做:
[cuckCoo invalidate];
[NSApp stop: nil];
ticking=0;
cuckCoo = NULL;
NSLog(@"tickCounter=%ld",tickCounter);
ticking 和 tickCounter 都是全局多头。
我没有从 onTick 中收到 NSLog 消息,并且 tickCounter 在运行循环结束时由 NSLog 报告保持为零。
所有这些都可以编译并运行良好。我只是从来没有得到任何蜱虫。我完全不知所措。任何想法,任何人?