问题是控制器中的任务正在保存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
}
希望有帮助!