0
「メインスレッドでMBProgressHUDにアクセスする必要があります。」 Webサービスからのデータがページにロードされると、MBProgressHUDを非表示にするとエラーが発生します。 これを解決するのを手伝ってください。数時間でこの問題に固執する。 私のコードは次のとおりです。'メインスレッドでMBProgressHUDにアクセスする必要があります。' - Swift 3
DispatchQueue.main.async {
self.spinnerActivity.hide(animated: true)
self.tableView.reloadData()
self.refreshControl.endRefreshing()
}
次のように私はのviewDidLoadでスピナーを開始しました:
spinnerActivity = MBProgressHUD.showAdded(to: self.view, animated: true);
spinnerActivity.label.text = "Loading";
spinnerActivity.detailsLabel.text = "Please Wait!!";
助けてください。
編集:
これは、そのビューコントローラの私の全体のコードです:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var refreshControl: UIRefreshControl!
var spinnerActivity: MBProgressHUD! = nil
override func viewDidLoad() {
super.viewDidLoad()
refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.green
refreshControl.attributedTitle = NSAttributedString(string: "Refreshing", attributes: [NSForegroundColorAttributeName: UIColor.white])
refreshControl.addTarget(self, action: #selector(ViewController.refresh(sender:)), for: UIControlEvents.valueChanged)
tableView.addSubview(refreshControl)
spinnerActivity = MBProgressHUD.showAdded(to: self.view, animated: true);
spinnerActivity.label.text = "Loading";
spinnerActivity.detailsLabel.text = "Please Wait!!";
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.back(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
navigationItem.title = city.uppercased()
self.runWebService()
}
func runWebService(){
let url = URL(string: "")!// have removed my url
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in // URLSession.shared().dataTask(with: url) { (data, response, error) is now URLSession.shared.dataTask(with: url) { (data, response, error)
if error != nil {
self.spinnerActivity.hide(animated: true)
print(error)
} else {
if let urlContent = data {
do {
guard let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as? [AnyObject] else {
self.spinnerActivity.hide(animated: true)
return
}
//processing web service
//DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
self.spinnerActivity.hide(animated: true)
self.tableView.reloadData()
self.refreshControl.endRefreshing()
}
} catch {
self.spinnerActivity.hide(animated: true)
print("JSON Processing Failed")
}
}
}
}
task.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func back(sender: UIBarButtonItem) {
_ = navigationController?.popToRootViewController(animated: true)
}
func refresh(sender:AnyObject) {
//pull to refresh
self.runWebService()
}
//remaining are table view data source and delegate methods }
コード内の他の場所でMBProgressHUDとやり取りしていないことは確かですか?まだ隠れていますか?それは即時ですか、またはコードが実行された後にいつか発生しますか? – toddg
は数分でコード全体を投稿します – Mamta
編集したコードを確認してください – Mamta