reloadData() 在 swift 中不起作用
reloadData() isn't work in swift
所以,我遇到了麻烦 - 无法重新加载 TableView 的数据,在命令行中我看到了良好的数据 - 当我单击按钮时 idMeet
已更改,但在模拟器中我没有看到刷新 table 单击按钮后查看,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
}
通常当 tableView 数据数组发生变化时,tableView 应该重新加载。在这种情况下,在按钮操作方法的末尾重新加载 tableview。
@IBAction func act(sender: UIButton) {
x = !x
getInfo()
tbRouteData.reloadData()
}
func getTmp(){
infoTmp = NSMutableArray()
infoTmp = getInfo()
tbRouteData.reloadData()
}
编写此代码,这将在数组填满后用新数据重新加载您的表格视图
重新加载数据应该在按钮内完成,但在 getInfo() 完成之后。以下应该有效:
@IBAction func act(sender: UIButton) {
x = !x
getInfo()
tbRouteData.reloadData()
}
这里有几个问题:
getTmp
函数应该重新加载数据:
func getTmp(){
infoTmp = getInfo()
tbRouteData.reloadData()
}
现在您有一个填充 属性 并重新加载 table 的函数,act
应该调用它,而不是 getInfo
:
@IBAction func act(sender: UIButton) {
x = !x
getTmp()
}
当您调用 getInfo
时,不会设置 infoTmp
。并通过调用 getTmp
来集中 infoTmp
的人口并在一个地方重新加载 table。
如果您在 table 视图中没有看到任何数据,请确保您已相应地设置 table 视图的 delegate
。您可以在 IB 中或以编程方式执行此操作:
override func viewDidLoad() {
super.viewDidLoad()
tbRouteData.delegate = self
}
当然,这假定您将视图控制器定义为符合 UITableViewDataSource
并已实现适当的方法。如果没有看到这些方法,我们无法判断那里是否还有其他问题。
所以,我遇到了麻烦 - 无法重新加载 TableView 的数据,在命令行中我看到了良好的数据 - 当我单击按钮时 idMeet
已更改,但在模拟器中我没有看到刷新 table 单击按钮后查看,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
}
通常当 tableView 数据数组发生变化时,tableView 应该重新加载。在这种情况下,在按钮操作方法的末尾重新加载 tableview。
@IBAction func act(sender: UIButton) {
x = !x
getInfo()
tbRouteData.reloadData()
}
func getTmp(){
infoTmp = NSMutableArray()
infoTmp = getInfo()
tbRouteData.reloadData()
}
编写此代码,这将在数组填满后用新数据重新加载您的表格视图
重新加载数据应该在按钮内完成,但在 getInfo() 完成之后。以下应该有效:
@IBAction func act(sender: UIButton) {
x = !x
getInfo()
tbRouteData.reloadData()
}
这里有几个问题:
getTmp
函数应该重新加载数据:func getTmp(){ infoTmp = getInfo() tbRouteData.reloadData() }
现在您有一个填充 属性 并重新加载 table 的函数,
act
应该调用它,而不是getInfo
:@IBAction func act(sender: UIButton) { x = !x getTmp() }
当您调用
getInfo
时,不会设置infoTmp
。并通过调用getTmp
来集中infoTmp
的人口并在一个地方重新加载 table。如果您在 table 视图中没有看到任何数据,请确保您已相应地设置 table 视图的
delegate
。您可以在 IB 中或以编程方式执行此操作:override func viewDidLoad() { super.viewDidLoad() tbRouteData.delegate = self }
当然,这假定您将视图控制器定义为符合
UITableViewDataSource
并已实现适当的方法。如果没有看到这些方法,我们无法判断那里是否还有其他问题。