我有一个在runloop中运行的计时器,问题是当计时器结束并且用户同时滚动页面时,应用程序崩溃并出现问题:
bool _WebTryThreadLock(bool),0x18d9be60:尝试从主线程或Web线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃......
这是计时器:
- (void)startTimer{
NSThread* timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread) object:nil]; //Create a new thread
[timerThread start]; //start the thread
}
-(void) startTimerThread
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
[repeatingTimerEtape invalidate];
NSString * temps;
if (questionCircuit) {
temps = [[Mission singletonMission].circuitTerrain valeurChampEtapeCircuitEnCours:@"et_temps_etape" :FALSE];
}
else {
temps = [[Mission singletonMission].histoireTerrain valeurChampQuestion:@"hi_temps_etape" :FALSE];
}
if (!b_Pause) {
[dateComp setHour:0];
[dateComp setMinute:[[FonctionUtile gauche:temps :2] intValue]];
[dateComp setSecond:[[FonctionUtile droite:temps :2] intValue]];
}
else {
b_Pause = FALSE;
}
self.repeatingTimerEtape = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateLabelTimerEtape:) userInfo:nil repeats:YES];
[runLoop run];
[pool release];
}
THX
答案 0 :(得分:0)
你创建了一个线程,然后在其上做了一些只能在主线程或“web线程”上完成的东西。
最有可能在您的updateLabelTimerEtape:方法中。查看回溯以确定无疑。
此外,valeurChampQuestion:::
是一个可怕的方法名称。不要创建具有缺少描述的参数的方法。 valeurChampQuestion:isSelected:
会更好(用更好的描述替换isSelected:
- 因为其他人无法分辨出该代码行应该是什么,这就是确认裸参数不好)。