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

标签 ios mysql swift

我正在尝试查找有关如何加载 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/

相关文章:

MySQL : Does a query searches inside the whole table?

php - [0]=> 数组末尾的 bool(false)

ios - 如何检测 Multipeer Connectivity 邀请的拒绝?

ios - titleView 图像出现并立即消失

ios - 手机重启后 iBeacon 监控/测距

ios - 这个日志在 dbaccess(framework for ios) "error >> no such table: _entityRevision"中意味着什么?

mysql - 在数据库中存储大量数据

ios - didSelect 执行不等待 didDeSelect 动画结束

ios - 从另一个类检索字符串值

ios - 在 Swift 3 中编写 UnsafeMutablePointer