获取按下UIButton的根视图

时间:2014-06-04 11:01:09

标签: ios asynchronous

在我的应用程序的主屏幕中,我有一个按钮来更新我的设备上的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];

1 个答案:

答案 0 :(得分:0)

您的应用程序有一个通常称为主线程或UI线程的线程。如果阻止此线程,则任何UI都将暂停,直到该线程上的进程完成为止。因此,这通常被认为是一个坏主意。

您需要在不同的线程上运行您的进程。 Grand Central Dispatch就是这样做的一种方法。

https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

有了它,您的代码可能看起来像这样

-(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];
    });
    });
}