UIAlertView开始显示,屏幕变暗,但它不会弹出,直到它为时已晚!

时间:2011-03-03 19:02:24

标签: iphone objective-c ios uialertview

我有一个按钮,按下该按钮会调用从一系列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的人都要注意创建有效的线程程序所带来的复杂性。例如,泄漏可能会出现,因为新线程没有自动释放池 - 您必须添加一个等等。

3 个答案:

答案 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