ios - CloudKit中如何通过creationDate查询?

标签 ios objective-c swift cloudkit

我想从 CloudKit 中获取最近 X 分钟的公共(public)/私有(private)条目。

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

    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
        }
    })
}

谢谢。

最佳答案

2020 年 10 月 5 日更新:

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

enter image description here

这里有关于 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 仪表板屏幕截图:

enter image description here

关于ios - CloudKit中如何通过creationDate查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26521999/

相关文章:

ios - 在初始化期间存储到 NSString 的值永远不会被读取

ios - 当 App 从后台 iOS 启动时从特定场景开始

ios - 如何在 iOS 中向包含图像 (nsdata) 的 URL 发出 PUT 请求

ios - NSURLSession上传任务不调用completionHandler

objective-c - NSCollectionView 网格只显示一行

ios - Swift 的 equatable 协议(protocol)一致性检查

ios - 在 Swift 中以编程方式将 UITableViewStyle 更改为 Plain?

performance - Swift 显式与推断类型 : Performance

ios - 如果找到匹配正则表达式,则从字符串中获取值

iphone - 想要使用 AVFoundation 框架在 iPhone 相机中使用缩放功能