美文网首页
iOS CloudKit 分页查询

iOS CloudKit 分页查询

作者: 心至靜行至遠 | 来源:发表于2019-07-13 14:15 被阅读0次

    对于CloundKit不熟悉的小伙伴可以参考这两篇文章,作者描述的很详细,相信你一看就会:
    使用CloudKit
    iOS CloudKit的使用

    了解CloundKit之后,就想用CloudKit做为后台服务,写一个简单的iOS应用,仿制了一个约球的微信小程序,主要功能:

    • 创建球员基本信息
    • 获取球员列表
    • 收藏、点赞球员功能
    • 保存收藏球员列表
    • 发帖功能
    • 获取帖子列表
    • 意见反馈
    Demo展示

    以上功能均已实现,数据也存储在iCloud云服务上。

    按照参考的文章这样的一个小demo实现起来并不困难。实现Demo的时候,数据接口都是全量拉取的,本身iCloud在国内的速度就很感人,而且我在数据库中并没有添加太多的数据。

    如果随着用户的增多,数据量变得很大,显然我们不能全量拉取数据,那么CloudKit是否有分页查询的机制呢?查阅了很多资料,关于这方面的内容基本上没有,然后我就去看CloudKit的API接口,果然你能想到的,天才的苹果SDK开发工程师也都能想到。

    CKQueryOPeration

    我发现CKQueryOPeration有两个属性:

    @NSCopying open var cursor: CKQueryOperation.Cursor?
    
    open var resultsLimit: Int
    

    相信看到这两个属性名,你也知道其中的奥妙了,resultsLimit相当于分页查询接口中的pageSizecursor则相当于查询的起始位置。代码实现:

    // 获取球员列
     func fecthPlayerList(cursor: CKQueryOperation.Cursor?, completion: (([Information]?, Error?) -> Void)?) {
    
            var operation: CKQueryOperation?
            if let cursor = cursor {
                operation = CKQueryOperation(cursor: cursor)
            } else {
                let predicate = NSPredicate(value: true)
                let query = CKQuery(recordType: "Players", predicate: predicate)
                operation = CKQueryOperation(query: query)
            }
            // 一次拉取15条数据
            operation?.resultsLimit = 15
    
            var records: [CKRecord] = []
            operation?.recordFetchedBlock = { record in
                records.append(record)
            }
            
            operation?.queryCompletionBlock =  { [weak self] (cursor, error) in
                // 保存查询位置,分页拉取更多数据传入(没有更多数据cursor返回为空)
                self?.cursor = cursor
                let players = records.map { (record) -> Information in
                    return Information(record: record)
                }
                
                DispatchQueue.main.async {
                    completion?(players, error)
                }
            }
            
            publicDatabase.add(operation!)
    }
    

    相关文章

      网友评论

          本文标题:iOS CloudKit 分页查询

          本文链接:https://www.haomeiwen.com/subject/ryepkctx.html