我有一个按钮,按下该按钮会调用从一系列URL加载信息的调用(加载时间约为5秒)。在实际进行这些调用之前,我想添加一个“加载”警报。当我使用UIAlertView时,屏幕会变暗,就像它即将弹出一样,但直到数据加载才会出现 - 太迟了!我不知道发生了什么,就像我正在加载数据的电话会立即优先显示新视图,即使它们是在调用添加新视图(或显示警报)之后制作的。 这是代码的摘要版本:
-(void) refresh{
UIAlertView *av = ...
[av show]; //this should pop up before dat begins to load
[myDataSource loadData]; //this contains a series of [NSData initWithURL] calls
[self.tableView reloadData];
//here I would hide the AlertView, but if I do I see it for just s split second
//when the tableView has already reloaded
}
提前感谢任何见解!
*** EDIT 任何使用performSelectorInBackground的人都要注意创建有效的线程程序所带来的复杂性。例如,泄漏可能会出现,因为新线程没有自动释放池 - 您必须添加一个等等。
答案 0 :(得分:1)
当您尝试从Internet检索数据时(我猜您使用的是[NSString stringWithContentsOfURL:...]),主线程正在等待这些数据,因此应用程序无法重绘接口。 您可以尝试使用:
[mySourceData performSelectorInBackground:@selector(loadData) withObject:nil];
如果你在对它进行任何操作之前使用coredata锁定NSManagedObjectContext并在完成时解锁它,请小心。
答案 1 :(得分:1)
如果你要执行一系列操作,除了performSelectorInBackground:像cescofry写的那样,你可以使用NSOperation和NSOperationQueue。
答案 2 :(得分:0)
你可能不需要UIAlertView。看看MBProgressHUD on GitHub。