gpt4 book ai didi

ios - 如何从mysql中检索连续数据

转载 作者:行者123 更新时间:2023-11-29 01:40:37 25 4
gpt4 key购买 nike

我正在尝试查找有关如何加载 tableView 或 collectionView 以进行连续滚动的教程或示例。

例如,我有一个包含 1000 多个条目的数据库,但我只想一次获取 100 个条目。然后,当滚动到达底部时,它会自动加载下一个 100,依此类推...

有人知道任何教程或示例吗?

我正在使用 swift 2 进行编码,但任何 Objective-C 示例都可以,因为我通常可以找出翻译。

我已经创建了一个测试应用程序来试用它。它从零开始获取 20 条记录。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{


@IBOutlet weak var personTable: UITableView!
var people = []
var startIndex:Int = 0;

override func viewDidLoad() {
super.viewDidLoad()
self.personTable.delegate = self
self.personTable.dataSource = self
fetchData()


}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.people.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("personCell") as! TableViewCell
cell.usernameLabel.text = people[indexPath.row]["username"] as? String
return cell
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == people.count - 1{
self.startIndex += 20
fetchData()
}
}

func fetchData(){
let post = PostService()
let data = ["startIndex":String(self.startIndex),"limit":"20"]
let url = "http://**********/index.php?action=fetchPersonList"
post.post(data, url: url) { (succeeded, msg) -> () in
if succeeded{
if msg as! String != "<null>"{
self.people = msg as! NSArray
self.personTable.reloadData()
}
}
}
}
}

它在到达最后一个单元格并重新加载数据时工作,但直到所有行都已下载后才会停止,此时它会抛出错误,因为没有更多数据。

我不确定从这里到哪里去。

过去几个小时我一直在网上寻找示例,但要么我没有使用正确的搜索词,要么没有那么多。

最佳答案

经过几个小时的实验(我希望通过找到一个不应该的教程来避免这种情况。)我最终找到了一种有效的方法。

这是适合我的代码。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{


@IBOutlet weak var personTable: UITableView!
var people = [NSDictionary]()
var page = 0
var holdPage = false;

override func viewDidLoad() {
super.viewDidLoad()
self.personTable.delegate = self
self.personTable.dataSource = self
fetchData()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.people.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("personCell") as! TableViewCell
cell.usernameLabel.text = people[indexPath.row]["username"] as? String
return cell
}

func scrollViewDidScroll(scrollView: UIScrollView) {
let actualPosition:CGFloat = scrollView.contentOffset.y;
let contentHeight:CGFloat = scrollView.contentSize.height
let viewHeight:CGFloat = scrollView.frame.height
if (actualPosition + viewHeight >= contentHeight && self.holdPage == false && self.page < 3) {
self.holdPage = true //this is used to stop this if statement from running more than once.
self.page++
self.fetchData()
}
}

func fetchData(){
let post = PostService()
let startIndex = self.page * 20
let data = ["startIndex":String(startIndex),"limit":"20"]
let url = "http://*********/index.php?action=fetchPersonList"
post.post(data, url: url) { (succeeded, msg) -> () in
if succeeded{
if let data = msg as? [NSDictionary]{
self.people = self.people + data
self.holdPage = false
self.personTable.reloadData()
}
}
}
}
}

我不得不使用 holdPage 变量,因为我发现当滚动到达末尾时它会一次性加载多个页面。

此方法的唯一缺点是,当您向下滚动时,它会不断向 people 数组中添加行,每次都会使它变大。我最初想删除不再可见的行,但事实证明这非常复杂。

除非有人能给我一个很好的例子?

关于ios - 如何从mysql中检索连续数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com