Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSTimer只是偶尔开火?_Iphone_Ios_Ios4_Iphone Sdk 3.0 - Fatal编程技术网

Iphone NSTimer只是偶尔开火?

Iphone NSTimer只是偶尔开火?,iphone,ios,ios4,iphone-sdk-3.0,Iphone,Ios,Ios4,Iphone Sdk 3.0,我遇到了一个问题,我的计时器随机不工作。我可以直接停止应用程序并重建它,而无需更改任何代码。它有时有效,有时无效? 当我说“有时”时,我指的是每个应用程序会话。如果它启动,它将保持运行。但它并不是运行每一个应用程序会话。 在使用下面两个代码块时,我看到了相同的情况 //Code1: //I tried this block of code after reading it might be related to how I am interacting with my UIElements wh

我遇到了一个问题,我的计时器随机不工作。我可以直接停止应用程序并重建它,而无需更改任何代码。它有时有效,有时无效? 当我说“有时”时,我指的是每个应用程序会话。如果它启动,它将保持运行。但它并不是运行每一个应用程序会话。 在使用下面两个代码块时,我看到了相同的情况

//Code1:
//I tried this block of code after reading it might be related to how I am interacting with my UIElements while the timer is running in the background.
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
syncWithServerTimer = [NSTimer timerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES];
[runloop addTimer:syncWithServerTimer forMode:NSRunLoopCommonModes];
[runloop addTimer:syncWithServerTimer forMode:UITrackingRunLoopMode];

//Code2:
syncWithServerTimer = [[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(syncWithServer) userInfo:nil repeats:YES] retain];
我再次尝试了这两种方法,它们大部分时间都有效,但不是所有时间都有效。
可能是什么问题?我不是在过早地释放或使其失效。

所以我想最好在主线程上启动计时器! 似乎每次我这么做都能奏效

[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];

所以我想最好在主线程上启动计时器! 似乎每次我这么做都能奏效

[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];

您看到的问题(根据您的答案判断)是,计时器在运行循环中被破坏。如果在运行循环上安排/添加计时器,则在所有计时器耗尽之前,运行循环不会运行


如果您的计时器应该具有主线程的生存期,或者您不能保证运行循环仍然存在,那么将其添加到主线程(尽管严格来说,这也不能保证计时器会启动,因为主运行循环可能会退出)。

您看到的问题(根据您的答案判断)计时器被运行循环破坏。如果在运行循环上安排/添加计时器,则在所有计时器耗尽之前,运行循环不会运行


如果计时器应该具有主线程的生存期,或者无法保证运行循环仍然存在,则将其添加到主线程中(尽管严格来说,这也不能保证计时器会启动,因为主运行循环可能会退出)。

您使用哪种方法执行计时器初始化(您发布的代码)?Hi@sergio its in-viewDidLoad如果看不到更多的代码,就不可能说了。当插入到-viewDidLoad中时,这两种方法似乎都能很好地工作。在Xcode中关闭应用程序之后,您可能没有正确地等待,然后再启动另一个实例?您使用哪种方法执行计时器初始化(您发布的代码)?Hi@sergio-its-in-viewdidLoad如果看不到更多的代码,这是不可能的。当插入到-viewDidLoad中时,这两种方法似乎都能很好地工作。在Xcode中终止应用程序后,您可能没有正确地等待它,然后再启动它的另一个实例?