在线程中触发sql查询时,表视图冻结

时间:2012-02-08 12:50:44

标签: iphone uitableview ios4 iphone-sdk-3.0 nsthread

我附加了一个新线程,在该线程中我发出了5个SQLite查询。

问题是,在完成所有查询的执行之前,我无法滚动表格视图。它冻结了几秒钟。

-(void)viewDidAppear:(BOOL)animated
{
    [NSThread detachNewThreadSelector:@selector(GetBackEndData) 
        toTarget:appDelegate withObject:nil];
}

// this is in appDelegate
-(void)GetBackEndData
{   
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    if([dicBarnearMe_Detail count]==0)
    {
        // this are sql queries method.
        [appDelegate SelectBeersonbottle_Count];
        [appDelegate SelectBeersonTap_Count];
        [appDelegate SelectGrowler_Count];
        [appDelegate SelectHappyHours_Count];
        [appDelegate SelectEvents_Count];

        // After completing this process I'm post notification 
        // for reloading table in other controller.
        [[NSNotificationCenter defaultCenter] postNotificationName:@"reload" 
            object:nil userInfo:nil];
    }

    [pool release];     
}

1 个答案:

答案 0 :(得分:0)

您正在viewDidAppear中创建一个新线程并在单独的线程中执行GetBackEndData选择器。

[[NSNotificationCenter defaultCenter] postNotificationName:@"reload" object:nil userInfo:nil];

你在NSNotificationCenter中创建GetBackEndData并重新加载一些数据意味着你必须等到线程完成执行并阻止UI线程。

在viewDidAppear中创建一个线程不是一种正确的方法,你可以在其他一些函数中使用dispatchQue,或者替换选项是等到你的线程执行完成并显示活动指标。