2016-12-30 40 views
1

林不知道为什么,但我有我的viewController, 按钮和文本字段时,该按钮是不可见的,当我点击按钮应该是它的时候出现。文本框中的预填充文本也不会出现。应用程序正在从后台线程修改自动布局引擎错误

我被提出以下警告(林不知道,如果相关):

二〇一六年十二月三十○日11:25:26.030 wellpleased [5462:776953]此应用程序修改自动布局引擎从主线程访问引擎后从后台线程中获取。这可能会导致引擎损坏和奇怪的崩溃。

如何防止此警告并使元素正确显示?

class events: UIViewController, UITableViewDelegate, UITableViewDataSource { 
 
    
 
    var rowID:String = "" 
 
    var value:String! 
 
    
 
    @IBOutlet var tableView: UITableView! 
 
    var tableData: [String] = [] 
 
    var tableEventMonth: [String] = [] 
 
    var tableEventDay: [String] = [] 
 
    var tableEventCity: [String] = [] 
 
    var tableEventLink: [String] = [] 
 
    var tableEventID: [String] = [] 
 
    
 
    @IBOutlet weak var tableTopConstraint: NSLayoutConstraint! 
 
    @IBOutlet weak var eventCodeView: UIView! 
 
    
 
    @IBAction func addButton(_ sender: Any) { 
 
    
 
      if self.eventCodeView.alpha == 1{ 
 
       
 
       
 
       self.view.layoutIfNeeded() 
 
       UIView.animate(withDuration: 1, animations: { 
 
        self.view.layoutIfNeeded() 
 
        self.eventCodeView.alpha = 0 
 
        }) 
 
       
 
       
 
       
 
       self.tableTopConstraint.constant = 1 
 
       UIView.animate(withDuration: 1) { 
 
        self.view.layoutIfNeeded() 
 
        
 
       } 
 
      }else{ 
 
       
 
       
 
       self.view.layoutIfNeeded() 
 
       UIView.animate(withDuration: 1, animations: { 
 
        self.view.layoutIfNeeded() 
 
        self.eventCodeView.alpha = 1 
 
        
 
       }) 
 
       
 
       
 
       
 
       self.tableTopConstraint.constant = 70 
 
       UIView.animate(withDuration: 1) { 
 
        self.view.layoutIfNeeded() 
 
        } 
 
     } 
 
     
 
    } 
 
    override func viewDidLoad() { 
 
     super.viewDidLoad() 
 
    
 
     let nib = UINib(nibName: "vwTblCell", bundle: nil) 
 
     tableView.register(nib, forCellReuseIdentifier: "cell") 
 
    
 
    } 
 
    
 
    override func viewDidAppear(_ animated: Bool) { 
 
     
 
     getTableData() 
 
    } 
 
    
 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
 
     return self.tableData.count 
 
    } 
 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell \t { 
 
     let cell: TblCell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as! TblCell 
 

 
     cell.lblCarName.text = self.tableData[indexPath.row] 
 
     cell.calendarDay.text = self.tableEventDay[indexPath.row] 
 
     cell.calendarMonth.text = self.tableEventMonth[indexPath.row] 
 
     cell.city.text = self.tableEventCity[indexPath.row] 
 
     
 
     let defaults = UserDefaults() 
 
     let event = defaults.string(forKey: "event") 
 
     
 
     if self.tableData[indexPath.row] == event { 
 
     cell.hereLabel.isHidden = false 
 
     } 
 
     
 
     return cell 
 
    } 
 
    
 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
 
     print("Row \(indexPath.row) selected") 
 
     
 
     rowID = tableEventID[indexPath.row] 
 
     self.performSegue(withIdentifier: "goAttendees", sender: self) 
 
     
 
    } 
 
    
 
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
 
     return 90 
 
    } 
 

 
    func getTableData(){ 
 
     
 
     let defaults = UserDefaults() 
 
     let userid = defaults.string(forKey: "id") 
 
    
 
    let url = NSURL(string: "https://www.asmserver.co.uk/wellpleased/backend/eventselect.php?userid=\(userid!)") 
 

 
     let task = URLSession.shared.dataTask(with: url as! URL) { (data, response, error) -> Void in 
 
      
 
      if let urlContent = data { 
 
       
 
       do { 
 
        
 
        if let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: []) as? [[String:AnyObject]] { 
 
         
 
         
 
         var i = 0 
 
         
 
         while i < jsonResult.count { 
 
          
 
          
 
          self.tableData.append(jsonResult[i]["eventname"]! as! String) 
 
          self.tableEventDay.append(jsonResult[i]["eventday"]! as! String) 
 
          self.tableEventMonth.append(jsonResult[i]["eventmonth"]! as! String) 
 
          self.tableEventCity.append(jsonResult[i]["city"]! as! String) 
 
          self.tableEventLink.append(jsonResult[i]["link"]! as! String) 
 
          self.tableEventID.append(jsonResult[i]["eventid"]! as! String) 
 
          
 

 
          
 
          
 
          i = i + 1 
 
          
 
         } 
 
         
 
        } 
 
        
 
       } catch { 
 
        
 
        print("JSON serialization failed") 
 
        
 
       } 
 
       
 
      } else { 
 
       
 
       print("ERROR FOUND HERE") 
 
      } 
 
      
 
      
 
      DispatchQueue.main.async(execute: {() -> Void in 
 
       
 
       self.tableView.reloadData() 
 
       
 
      }) 
 
      
 
      self.tableView.isUserInteractionEnabled = true 
 
     } 
 
     
 
     task.resume() 
 

 
      } 
 

 
override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
 
    
 
    if(segue.identifier == "goAttendees") { 
 
     
 
     let attendees = (segue.destination as! attendees) 
 
     attendees.value = rowID 
 
     
 
    } 
 

 
    } 
 

 
}

+1

请它从变 “DispatchQueue.main.async(执行:{() - >空隙中 self.tableView.reloadData() })” 到“dispatch_async(dispatch_get_main_queue(),{ self.tableView .reloadData() })“ –

+0

谢谢!这解决了错误,但我的界面元素仍然无法正确显示。该按钮在页面加载时不可见,任何想法为什么会发生这种情况? – MattBlack

+0

可能与您的AutoLayout约束有关。 –

回答

相关问题