用 CloudKit 驱动主从
Powering Master-Detail with CloudKit
我有一个 UISearchResultsController
可以在键入时在本地搜索,并在按下搜索按钮时进行远程搜索 (CloudKit)。返回的结果数需要在 10-30 个之间(我目前正在用 25 个来测试我的应用程序,它总是足够了)
搜索结果列表由 RecordType1
填充,而其详细信息由 RecordType1
和 RecordType2
填充。我的问题是如何在最小化我的 requests/sec 的同时获取第二个引用类型。我正在查看 Apple 的 CloudCaptions 示例,他们通过在获取每个 RecordType1
时获取第二种记录类型来解决问题。这似乎不必要地创建了获取请求(1[RecordType1
] + 25[RecordType2
] = 26 个请求)。我怎样才能减少这个?似乎在两个请求中应该是可能的(一个用于 RecordType1
,然后一个用于获取与之关联的所有 RecordType2
)。
更新:RecordType2
有对 RecordType1
的反向引用
除非我误解了你的问题,否则我认为你可以在你的 CloudKit 数据库上执行查询:
let searchKey = ... // value for recordType1
let z = CKRecordZone.default()
let predicate = NSPredicate(format: "recordType1 == %@", searchKey)
let query = CKQuery(recordType: "recordType2", predicate: predicate)
db.perform(query, inZoneWith: z.zoneID) { (records, error) in
if error != nil {
// `records` contains recordType2
} else {
// check for errors
}
}
您还可以使用谓词中的 IN
比较来搜索多个键:
let searchKeys = ... // [value1, value2, value3, etc.]
let predicate = NSPredicate(format: "recordType1 IN %@", searchKeys)
参考资料
我有一个 UISearchResultsController
可以在键入时在本地搜索,并在按下搜索按钮时进行远程搜索 (CloudKit)。返回的结果数需要在 10-30 个之间(我目前正在用 25 个来测试我的应用程序,它总是足够了)
搜索结果列表由 RecordType1
填充,而其详细信息由 RecordType1
和 RecordType2
填充。我的问题是如何在最小化我的 requests/sec 的同时获取第二个引用类型。我正在查看 Apple 的 CloudCaptions 示例,他们通过在获取每个 RecordType1
时获取第二种记录类型来解决问题。这似乎不必要地创建了获取请求(1[RecordType1
] + 25[RecordType2
] = 26 个请求)。我怎样才能减少这个?似乎在两个请求中应该是可能的(一个用于 RecordType1
,然后一个用于获取与之关联的所有 RecordType2
)。
更新:RecordType2
有对 RecordType1
除非我误解了你的问题,否则我认为你可以在你的 CloudKit 数据库上执行查询:
let searchKey = ... // value for recordType1
let z = CKRecordZone.default()
let predicate = NSPredicate(format: "recordType1 == %@", searchKey)
let query = CKQuery(recordType: "recordType2", predicate: predicate)
db.perform(query, inZoneWith: z.zoneID) { (records, error) in
if error != nil {
// `records` contains recordType2
} else {
// check for errors
}
}
您还可以使用谓词中的 IN
比较来搜索多个键:
let searchKeys = ... // [value1, value2, value3, etc.]
let predicate = NSPredicate(format: "recordType1 IN %@", searchKeys)