【发布时间】:2011-03-03 19:02:23
【问题描述】:
我有一个按钮,按下该按钮时会调用从一系列 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
}
提前感谢您的任何见解!
***编辑 对于使用 performSelectorInBackground 的任何人,请注意创建有效的线程程序所增加的复杂性。例如,泄漏可能会在新线程没有自动释放池时出现 - 您必须添加一个,等等。
【问题讨论】:
-
如果我理解正确,您实际上是在阻止调用线程安排要显示的警报,并在安排视图时重新加载表视图项。因此,当方法返回时,表视图已经知道要填充的所有行。你能分别和异步地做这两件事吗?就像,使用异步 performSelector:afterDelay: 或 dispatch_after() 调用,首先显示警报然后重新加载数据,分别?这可能会有所帮助。
标签: iphone objective-c ios uialertview