NSTimer 触发 UIProgressView 失败

Posted

技术标签:

【中文标题】NSTimer 触发 UIProgressView 失败【英文标题】:NSTimer Triggering UIProgressView Failure 【发布时间】:2010-12-14 03:05:43 【问题描述】:

我在 NSObject 类 (Timer) 中使用 NSTimer,它触发一个方法,增加一个变量并触发 View Controller (InfoViewController) 中的一个方法。 (困惑;-D)

一切都显示在屏幕上,并且计时器已正确启动。变量 f.hunger 更新并显示正确的值(使用 printf("%f", f.hunger) 时),但 UIProgress 栏不会自行更新。 f.hunger 的起始值为 1。

如果有人可以帮助我,请指出我在哪里犯了明显的错误或得到建议,我将不胜感激,因为它已经让我思考了好几个小时了。我在下面添加了一些示例代码,以更清楚地显示我在做什么。

祝大家好运。 :-D

定时器类

- (void)startHungerTimer

 if(hungerTimer.isValid == NO)
 
  infoVC = [[InfoViewController alloc] init];
  self.hungerTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self     selector:@selector(incrementHungerTimer:) userInfo:nil repeats:YES];
 


- (void)incrementHungerTimer:(NSTimer *)aTimer

    f.hunger -= 0.01;
    [infoVC updateHungerProgress];

信息视图控制器

- (void)updateHungerProgress

 Functions *f = [Functions sharedFunctions];
 hungerBar.progress = f.hunger;        


- (void)loadView

    hungerBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
    [hungerBar setFrame:CGRectMake(17.0, 30.0, 160.0, 10.0)];
    hungerBar.progress = f.hunger;
    [bView addSubview:hungerBar];
    [hungerBar release];

【问题讨论】:

您是否确认饥饿栏.progress 已通过 IB 正确初始化/连接(如果您使用了 IB)? 是的,我已经在 -(void)loadView 中初始化了上面的饥饿条。抱歉应该提到这一点。 :-) 是否通过任意文字设置饥饿栏.进度更新栏,例如饥饿条.progress = 0.50f; Umm 刚刚尝试在 updateProgressBar 方法被调用时将饥饿栏.progress 设置为 0.50f,但它没有这样做。就像由于某种原因在该方法中它不允许我更新 UIProgressView。 :( 【参考方案1】:

鉴于您的问题和 cmets,我的猜测是您的“hungerBar”插座未连接到 Interface Builder 中的进度条。

【讨论】:

为这个建议干杯,但我没有使用 Interface Builder。我在代码中做这一切。 :-) 那么我建议发布您用于创建进度条的代码。 我已经编辑了上面的帖子以添加 -(void)loadView 显示我创建 UIProgressView 的代码部分。希望这能更清楚地说明这一点。 :-) 好吧,看起来一切都应该没问题,因为您保持对饥饿条的引用。 不!我在跳,那里会出什么问题。无论如何感谢您的帮助。

以上是关于NSTimer 触发 UIProgressView 失败的主要内容,如果未能解决你的问题,请参考以下文章

发生 uiscrollview 事件时未触发 NSTimer

发生 uiscrollview 事件时未触发 NSTimer

当应用程序后台运行时,NSTimer 是不是会触发?

当 runloop 被阻塞时,NSTimer 不会触发

NSTimer 应该从通知调用的方法内部触发

NSTimer 和 NSInvocation,定时器不触发