所以,我有麻烦-无法重新加载table view的数据,在命令行中我看到好的数据-当我单击按钮时idMeet
被更改,但是在模拟器中,单击按钮后我看不到刷新table view,并且idMeet
被更改,我的查询也被更改。我知道我必须使用tableView.reloadData()
,但不知道在哪里写才能正确工作?
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
}
最佳答案
这里有几个问题:getTmp
函数应重新加载数据:
func getTmp(){
infoTmp = getInfo()
tbRouteData.reloadData()
}
既然有了填充属性并重新加载表的函数,
act
应该调用它,而不是getInfo
:@IBAction func act(sender: UIButton) {
x = !x
getTmp()
}
当您调用
getInfo
时,不会设置infoTmp
。通过调用getTmp
将infoTmp
的总体集中并在一个位置重新加载表。如果在表视图中没有看到任何数据,请确保相应地设置了表视图的
delegate
。您可以在IB中或以编程方式执行此操作:override func viewDidLoad() {
super.viewDidLoad()
tbRouteData.delegate = self
}
当然,这假设您将视图控制器定义为符合
UITableViewDataSource
并实现了适当的方法。如果看不到这些方法,我们就无法判断是否还有进一步的问题。