在處理線程和主線程上,獲得標籤更改爲HUD
的最佳方式是什麼?多個派發使用MBProgressHUD
[activitySpinner startAnimating];
//[HUD setLabelText:@"Connecting"];
//[HUD showUsingAnimation:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Connecting1";
NSString *url = [NSString stringWithFormat:@"my URL", [dataObj.pListData objectForKey:@"API_BASE_URL"], userField.text, passwordField.text];
NSLog(@"Login: %@",url);
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
[HUD setLabelText:@"Processing"];
dispatch_async(dispatch_get_main_queue(), ^{
if ([json objectForKey:@"authToken"] != nil) {
[HUD setLabelText:@"Logging In"];
NSLog(@"Found authtoken %@", [json objectForKey:@"authToken"]);
[dataObj setAuthToken:[json objectForKey:@"authToken"]];
[dataObj setLocationId:[json objectForKey:@"c_id"]];
[dataObj setStaffId:[[json objectForKey:@"staffOrRoomsId"] integerValue]];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[HUD setLabelText:@"Downloading"];
});
[self getAllData];
[self performSegueWithIdentifier:@"segueToRootController" sender:self];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:[json objectForKey:@"friendlyErrors"] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
alert = nil;
}
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
[activitySpinner stopAnimating];
});
我試過上面的,因爲如果我在主線程上運行標籤更改,它將不會改變,直到所有處理完成。
在我viewWillAppear
我設置
HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
HUD.delegate = self;
它會顯示連接,但不會顯示處理或下載。
謝謝,我會確保我沒有創建任何線程。自從這篇文章我修改了代碼,所以我會確定的。 – Bot 2012-04-23 18:29:36