【问题标题】:How to query by creationDate in CloudKit?CloudKit中如何通过creationDate查询?
【发布时间】:2014-12-18 18:16:43
【问题描述】:

我想从 CloudKit 获取最后 X 分钟的公共/私人条目。

我尝试了这种效果,但失败了:

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

但这会得到我的数据,但我不确定我是在查询所有内容还是只是为了某种上限:

    let predicate = NSPredicate(value: true)

我希望能够在一定时间内进行查询。如果不做客户端的创建排序逻辑,这可能吗?

这是完整的代码块:

func fetchPublicData(completion: ((records:[AnyObject]) -> Void)!)
{
    let date = NSDate(timeInterval: -60.0 * 120, sinceDate: NSDate())
    let predicate = NSPredicate(format: "creationDate > %@", date)
    let query = CKQuery(recordType: "MyDataRecordType", predicate: predicate)

    let container = CKContainer.defaultContainer()
    let publicDb = container.publicCloudDatabase

    publicDb.performQuery(query, inZoneWithID: nil,
    {
        (results, error) in

        if error != nil
        {
            self.handleError(error)
        }
        else
        {
            // do stuff
        }
    })
}

谢谢。

【问题讨论】:

  • aside:Date(timeIntervalSinceNow: -60 * 120) 是创建您正在使用的日期的另一种方式 - “120 分钟前”

标签: ios objective-c swift cloudkit


【解决方案1】:

2020 年 10 月 5 日更新:

发现了我自己的问题。 您需要登录 CloudKit 仪表板,转到 Schema 并确保“索引类型”设置为可查询。

这里有更多关于 CloudKit 可以使用哪种 NSPredicate 的详细文档: https://developer.apple.com/documentation/cloudkit/ckquery#//apple_ref/doc/uid/TP40014043-CH1-SW8

一旦设置,您就可以像这样按日期查询:

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

[已弃用] CloudKit 仪表板的屏幕截图,下面是第一个接受的答案:

【讨论】:

  • 谢谢,我保证我不会使用它来轮询 CloudKit 上的 modifyDate 计时器以避免设置所有那些讨厌的区域回调。
  • @Genki:恐怕有了新的 CloudKit 仪表板,我再也找不到激活复选标记的方法了……你能帮忙做一个新的截图吗?
  • @DrMickeyLauer - 感谢您指出这一点。我更新了。
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多