我附加了一个新线程,在该线程中我发出了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];
}
答案 0 :(得分:0)
您正在viewDidAppear
中创建一个新线程并在单独的线程中执行GetBackEndData
选择器。
[[NSNotificationCenter defaultCenter] postNotificationName:@"reload"
object:nil userInfo:nil];
你在NSNotificationCenter
中创建GetBackEndData
并重新加载一些数据意味着你必须等到线程完成执行并阻止UI线程。
在viewDidAppear中创建一个线程不是一种正确的方法,你可以在其他一些函数中使用dispatchQue,或者替换选项是等到你的线程执行完成并显示活动指标。