线程锁定错误

时间:2011-02-08 17:38:44

标签: iphone objective-c

我有一个在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

1 个答案:

答案 0 :(得分:0)

尝试从主线程或Web线程以外的线程获取Web锁。

你创建了一个线程,然后在其上做了一些只能在主线程或“web线程”上完成的东西。

最有可能在您的updateLabelTimerEtape:方法中。查看回溯以确定无疑。

此外,valeurChampQuestion:::是一个可怕的方法名称。不要创建具有缺少描述的参数的方法。 valeurChampQuestion:isSelected:会更好(用更好的描述替换isSelected: - 因为其他人无法分辨出该代码行应该是什么,这就是确认裸参数不好)。