2010-08-19 40 views
1

我一直在尝试大约一天,以获取表单元格以在加载新视图时显示活动指标。在didSelectRowAtIndexPath方法我想显示的指标,而下面的运行作为一个表视图的活动指标加载另一个

[self.navigationController pushViewController:subKeywordController animated:YES]; 

该控制器然后运行

我已经搜查了相当密集的SQL查询网页和阅读几十个帖子,但似乎没有帮助与我的具体问题。我知道我需要在另一个线程中运行指标,因为推送和后续加载优先,但我不确定如何去做。我想过在控制器中运行SQL查询之前,但这变得非常混乱。

奇怪的是,我一直在使用MBProgressHUD在这个相同的表视图中显示忙碌的游标没有问题。只有当我应用搜索,然后选择导致此错误的结果之一:

bool _WebTryThreadLock(bool),0x1d79b0:试图从主线程或Web线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃...

该应用程序继续在iPhone上,但崩溃的模拟器。

任何帮助将不胜感激。

回答

2

问题是,您在控制器中的任务持有UI代码(但您可能已经知道!)。解决这个的廉价和简单的方法是把一个微小的延迟上使用计时器开始你缓慢的任务(在这种情况下,您的SQL查询):

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // instead of running the SQL here, run it in a little bit 
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(doSQL:) userInfo:nil repeats:NO]; 

    // Show the please wait stuff 
    [activityIndicator setHidden:NO]; 
} 

- (void)doSQL:(NSTimer *)timer { 
    // Do your sql here 
} 

解决此的另一种方式是将你的SQL进入一个单独的线程:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // instead of running the SQL here, run it in a little bit 
    [self performSelectorInBackground:@selector(doSQL) withObject:nil]; 

    // Show the please wait stuff 
    [activityIndicator setHidden:NO]; 
} 

- (void)doSQL { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // Do your sql here 

    // Tell the main thread 
    [self performSelectorOnMainThread:@selector(doneSQL) userInfo:nil waitUntilDone:YES]; 

    // Cleanup 
    [pool release]; 
} 

- (void)doneSQL { 
    // Update your UI here 
} 

希望帮助!

+0

谢谢。我来这里删除这个,因为这是一个愚蠢的错误,我没有打电话给'resignFirstResponder' 但是,谢谢你的答案。 – Matt 2010-08-19 14:14:19

相关问题