1

Im not sure why but I have a button and textfield on my viewController, the button is not visible when the view appears but when I click where the button should be it then appears. The pre-populated text in the text box also does not appear.

I am being presented with the following warning (im not sure if its related):

2016-12-30 11:25:26.030 wellpleased[5462:776953] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

How would I prevent this warning and have the elements appear correctly?

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  {
        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
        
    }

  }

}
LF00
  • 27,015
  • 29
  • 156
  • 295
MattBlack
  • 3,616
  • 7
  • 32
  • 58

1 Answers1

0

You had better change UI only in the main thread. For swift3 refer to this post,

for more swift<2, 3 objective-c.

Community
  • 1
  • 1
LF00
  • 27,015
  • 29
  • 156
  • 295