So, I have trouble - can't reloadData of TableView, in command line I see good data - when I click button idMeet
is changed, but in Simulator I don't see refresh table view after click on the button, and idMeet
is changed and my query is changed too. I understand that I must use tableView.reloadData()
, but don't understand where write it for correct working?
var x = true;
@IBOutlet weak var myButton: UIButton!
@IBOutlet var tbRouteData: UITableView!
@IBAction func act(sender: UIButton) {
x = !x
getInfo()
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
self.getTmp()
}
func getInfo() -> NSMutableArray {
sharedInstance.database!.open()
var idMeet: Int
if x {
idMeet = 1
} else {
idMeet = 2
}
print(idroute)
let selectInfo: FMResultSet! = sharedInstance.database!.executeQuery("SELECT * FROM t1 AS one JOIN t2 AS two ON (one.id = two.id AND two.line_id = ?) ORDER BY two.position ASC", withArgumentsInArray: [idMeet])
...
return tmp
}
func getTmp(){
infoTmp = NSMutableArray()
infoTmp = getInfo()
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return infoTmp.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PrivateCell
let my:Info = infoTmp.objectAtIndex(indexPath.row) as! Info
cell.listOfStop.text = my.Name.uppercaseString
return cell
}
There are a few issues here:
The getTmp
function should reload the data:
func getTmp(){
infoTmp = getInfo()
tbRouteData.reloadData()
}
Now that you have a function that populates the property and reloads the table, act
should call that, rather than getInfo
:
@IBAction func act(sender: UIButton) {
x = !x
getTmp()
}
When you call getInfo
, that doesn't set infoTmp
. And by calling getTmp
that centralizes the population of infoTmp
and reloading of the table in one place.
If you're not seeing any data in your table view, make sure that you've set the delegate
of the table view accordingly. You can do that either in IB, or programmatically:
override func viewDidLoad() {
super.viewDidLoad()
tbRouteData.delegate = self
}
This assumes, of course, that you defined your view controller to conform to UITableViewDataSource
and have implemented the appropriate methods. Without seeing those methods, we can't tell if there might be some further issue there.