2

我正在开发一个需要逐秒更新的 iOS 应用程序(FW:5.0+ 和 ARC)。

目前,我在一个方法中有这个(当 -ViewDidLoad 时在 performSelector 中调用它):

-(void)FireOnload {
counter = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDownTime) userInfo:nil repeats:YES];
[counter fire];
[[NSRunLoop mainRunLoop] addTimer:counter forMode: NSDefaultRunLoopMode]; // <-- Causing Problem
}

-(void)countDownTime
{
double timeNow = [[NSDate date] timeIntervalSince1970];
double timeLeft = timeEnding - timeNow;

if(timeLeft < 60) // Less then 60 seconds, do something.
{
   //Do Stuff
}

}

counter变量在标头中称为 NSTimer。我明确调用[counter fire],所以视图一加载就调用它,而不是 1 秒后调用。

在 iOS 模拟器中运行良好,并且每秒都会触发一次,但是当它进入 iDevice 时,它​​会崩溃。

我已经注释掉了这NSRunLoop条线,并且 iDevice 没有崩溃。但是,它不再每秒更新一次。

我在这里做错了什么?

4

2 回答 2

2

发现问题:

改变:

@property (weak, nonatomic) NSTimer *counter;

到:

@property (strong, nonatomic) NSTimer *counter;

如果您不使用 ARC,则需要替换strongretain

于 2012-03-27T21:29:12.407 回答
0

你说你performSelector用来调用FireOnLoad。为什么?如果您在后台线程上调用它,您需要知道 NSRunLoop 不是线程安全的,因此您不应访问主运行循环,除非在主线程上。

于 2012-03-27T08:42:15.783 回答