在我的应用程序的主屏幕中,我有一个按钮来更新我的设备上的SQLite数据库。此升级使用外部类:
-(IBAction)updateData:(id)sender{
SQLManager *sqlmgr =[[SQLManager alloc]init];
[sqlmgr createDB];
}
问题是我想显示一个进度对话框MBProgressHUD但是如果从updateData事件中释放只运行1秒,当我调用该方法时仍然没有工作。
在SQLManager createDB方法中,我运行了5个异步任务。这就是我需要显示Dialog Progress
的原因我唯一想到的就是调用我调用的方法,但是我喜欢从按下按钮的位置开始放入显示MBProgressHUD的方法的参数,但我不知道如何... < / p>
MBProgressHUD *hud;
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Cargando";
SQLManager *sqlmgr =[[SQLManager alloc]init];
[MBProgressHUD showHUDAddedTo:??????????? animated:YES];
答案 0 :(得分:0)
您的应用程序有一个通常称为主线程或UI线程的线程。如果阻止此线程,则任何UI都将暂停,直到该线程上的进程完成为止。因此,这通常被认为是一个坏主意。
您需要在不同的线程上运行您的进程。 Grand Central Dispatch就是这样做的一种方法。
有了它,您的代码可能看起来像这样
-(IBAction)updateData:(id)sender{
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Call your function or whatever work that needs to be done
//Code in this part is run on a background thread
SQLManager *sqlmgr =[[SQLManager alloc]init];
[sqlmgr createDB];
dispatch_async(dispatch_get_main_queue(), ^(void)
{
//Stop your activity indicator or anything else with the GUI
//Code here is run on the main thread
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
}