簡體   English   中英

CloudKit:按創建日期排序查詢結果

[英]CloudKit: Order query results by creation date

從CloudKit加載項目時,我想按創建日期訂購結果。 我相信現在它正在按記錄的第一個屬性進行排序。

func loadItems() {
    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: "Items", predicate: predicate)
    db.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in
        if error != nil {
            println(error.localizedDescription)
        }

        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            items = results as [CKRecord]
            self.tableView.reloadData()
            println("items: \(items)")
        }
    }
}

這就是我要找的東西:

query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

這是Objective-C解決方案。 它在Swift中的工作方式類似。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
CKDatabase *privateDatabase = [self.myContainer privateCloudDatabase];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"command" predicate:predicate];
query.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]initWithKey:@"creationDate" ascending:true]];

有了這個,您可能會收到以下錯誤消息:

CKError 0x12e874f10:“無效參數”(12/2016); server message =“Field'___createTime'未標記為可排序”; uuid = 468AC2A4-24D6-4A56-81BB-6A2A8027DC15; container ID =“iCloud.com.xxx”

因此,只需在儀表板中對其進行排序: 在此輸入圖像描述

斯威夫特 - 3.0

let recordInsertDate = records["creationDate"]!
print("recordInsertDate : \(recordInsertDate)")
let query = CKQuery(recordType: "className", predicate: NSPredicate(format: "creationDate >= %@ " , recordInsertDate as! CVarArg))

您可以使用NSPredicate。 你是對的。

let startDate = NSDate(timeInterval: -60.0 * 120, sinceDate: NSDate())
let predicate = NSPredicate(format: "creationDate > %@", startDate)

但是您必須在CloudKit中啟用creationDate-field進行查詢,以便您可以在查詢中使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM