reloadData() 不能快速工作
Posted
技术标签:
【中文标题】reloadData() 不能快速工作【英文标题】:reloadData() isn't work in swift 【发布时间】:2016-03-15 17:51:58 【问题描述】:所以,我遇到了麻烦 - 无法重新加载 TableView 的数据,在命令行中我看到了好的数据 - 当我单击按钮时 idMeet
已更改,但在模拟器中单击按钮后我看不到刷新表视图,并且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
【问题讨论】:
您的代码中没有重新加载 我问必须在哪里重新加载 【参考方案1】:这里有几个问题:
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
并实现了适当的方法。如果没有看到这些方法,我们无法判断那里是否还有其他问题。
【讨论】:
【参考方案2】:func getTmp()
infoTmp = NSMutableArray()
infoTmp = getInfo()
tbRouteData.reloadData()
编写此代码,这将在数组填满后使用新数据重新加载您的 tableview
【讨论】:
谢谢,但它不起作用,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到) 您是否曾经在 tableVIew 中看到过数据?您是否链接了数据源和数据委托?是否调用了 tableView 方法? 不,我没有在 tableView 中看到新数据。我看到点击按钮后“idMeet”发生了变化,但tableView中的数据没有变化。是的,数据源和数据委托已链接。【参考方案3】:重新加载数据应该在按钮内完成,但在 getInfo() 完成之后。以下应该有效:
@IBAction func act(sender: UIButton)
x = !x
getInfo()
tbRouteData.reloadData()
【讨论】:
谢谢,但它不起作用,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到) 您是否能够打印新数据以确保其正确填充?可能是刷新正确但数据没有变化 所以,点击后我从数据库的命令行中获取新数据,我将搜索我的新数据不想重新加载的位置。这是第一次,因为在下一个VC中我没有那么问题.. 我看到 func tableView 得到了很好的新数据,因为当 print(my.Name) 我看到来自 DB 的新数据,但在模拟器中我看到旧数据(无需重新加载) 不看应用很难说是什么问题。确保你尝试运行其他函数底部的 reloadData 函数,看看它是否有任何效果【参考方案4】:通常当 tableView 数据数组改变时 tableView 应该重新加载。在这种情况下,在按钮操作方法的末尾重新加载 tableview。
@IBAction func act(sender: UIButton)
x = !x
getInfo()
tbRouteData.reloadData()
【讨论】:
不工作,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到)以上是关于reloadData() 不能快速工作的主要内容,如果未能解决你的问题,请参考以下文章