【问题标题】:How can i set a limit to the number of results given in cloudkit如何对 cloudkit 中给出的结果数量设置限制
【发布时间】:2015-04-13 13:48:41
【问题描述】:

这是我从 icloud 检索数据的代码。我如何将它检索到的数据数量限制为 25?我之前看到过这个问题的回答,但我不确定如何将它应用到我的代码中?你能帮忙吗?

这是我之前看到问题的答案。请准确告诉我如何将它添加到我的代码中,或者只是在代码中给出答案。

CKQuery from private zone returns only first 100 CKRecords from in CloudKit

CloudKit Batch Fetches?

import UIKit
import CloudKit

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

    @IBOutlet weak var collectionView: UICollectionView!

    var EventsArray:[String] = [String]()

    var container:CKContainer?
    var privateDatabase:CKDatabase?
    var publicDatabase:CKDatabase?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.container = CKContainer.defaultContainer()
        self.privateDatabase = self.container?.privateCloudDatabase
        self.publicDatabase = self.container?.publicCloudDatabase


        self.collectionView.dataSource = self
        self.collectionView.delegate = self

        self.LoadEvents()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func LoadEvents() {

            let predicate:NSPredicate = NSPredicate(value: true)
            let query:CKQuery = CKQuery(recordType: "Data", predicate: predicate)
            query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

            if let database = self.publicDatabase {
                database.performQuery(query, inZoneWithID: nil, completionHandler: { (records:[AnyObject]!, error:NSError!) in

                    if error != nil {
                      self.alert("Error: \(error.localizedDescription)", Message: "Make sure iCloud is turned on and you are connected to the internet")
                      self.loading.hidden = true
                    }
                    else {
                        dispatch_async(dispatch_get_main_queue()) {

                            self.EventsArray.removeAll(keepCapacity: false)

                            for record in records {
                                let usernameRecord:CKRecord = record as CKRecord
                                if let event = usernameRecord.objectForKey("Events") as? String{
                                    self.EventsArray.insert(event, atIndex: 0)
                                }
                            }

                            //update data
                            self.collectionView.reloadData()
                            self.loading.hidden = true
                        }
                    }
                    })
                }}

【问题讨论】:

    标签: ios xcode swift icloud cloudkit


    【解决方案1】:

    您应该使用 CKQueryOperation 而不是 performQuery。 然后你可以像这样设置结果限制:

    operation.resultsLimit = 25
    

    在这个问题中,您可以看到如何使用 CKQueryOperation:CKQuery from private zone returns only first 100 CKRecords from in CloudKit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2010-12-07
      相关资源
      最近更新 更多