【问题标题】:Why would my timer work on the iPad simulator but not on the iPad?为什么我的计时器可以在 iPad 模拟器上工作,但不能在 iPad 上工作?
【发布时间】:2011-05-29 12:12:56
【问题描述】:

我正在使用所有 UIKit,并且——出于原型设计的目的,我只是将所有逻辑推到了主 viewController 中。我在 viewDidLoad 中创建了一些 UIView,隐藏了一些,然后设置了一个 NStimer 以在 4 秒内取消隐藏隐藏的那些。这个计时器在模拟器中完美触发,但在 iPad 上永远不会触发。为什么会发生这种情况,我什至应该寻找什么?

这是我设置视图和计时器的地方。

- (void)viewDidLoad {

[super viewDidLoad];

//snipped out long code that adds UIViews as subviews and runs fine
curtainView.hidden=YES;
questionLabel.hidden=YES;

[NSTimer scheduledTimerWithTimeInterval:4
                                 target:self
                               selector:@selector(dropCurtain:)
                               userInfo:nil
                                repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:5
                                 target:self
                               selector:@selector(askQuestion:)
                               userInfo:nil
                                repeats:NO];

}

这是第一个计时器到时时调用的函数。这不在 iPad 上运行。

-(void)dropCurtain:(NSTimer *)timer{
curtainView.hidden=NO;
//curtainView.alpha=.5;
[self.view bringSubviewToFront:curtainView];
[self.view bringSubviewToFront:triesLabel];

}

【问题讨论】:

  • 发布一些你正在使用的代码。
  • 似乎我的计时器正在触发,我可以逐步遍历 dropCurtain 函数中的所有行...但是屏幕没有改变,视图没有被隐藏。

标签: ipad ios nstimer simulator


【解决方案1】:

您的回调可能不在主线程中调用,ui 更改调用仅在主线程中有效。如果是这种情况,则有一个 nsobject 方法可以在主线程中安排对选择器的调用,您可以从回调中调用它来操作 ui

(抱歉,我的工作电脑不在附近)

【讨论】:

  • 你所描述的比我习惯的要高级一点。如果是这个原因,最简单的测试方法是什么?另外,我很难弄清楚如何最好地按照您的建议行事。我尝试创建计时器然后插入这一行: [self performSelectorOnMainThread:@selector(dropCurtain:) withObject:nil waitUntilDone:false];但它似乎没有任何区别。
猜你喜欢
  • 2012-11-27
  • 2011-11-16
  • 2018-09-05
  • 2019-05-04
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2016-10-17
  • 2012-10-25
相关资源
最近更新 更多