无法从 Cloudkit Cloud (JS) 检索所有记录
Posted
技术标签:
【中文标题】无法从 Cloudkit Cloud (JS) 检索所有记录【英文标题】:Can't retrieve all records from Cloudkit Cloud (JS) 【发布时间】:2015-07-02 01:08:51 【问题描述】:我有一个 html 表格,我想用存储在 Cloudkit 仪表板中的值填充。
我已成功检索记录并用它们填充我的表,我注意到的问题是,如果我给它一些时间并尝试再次重新加载表,一些记录将无法检索。在这期间我没有更改任何代码,所以我对这是如何/为什么发生这种情况感到非常困惑。下面是我的代码示例和错误日志:
public-query.js:
records.forEach(function(record)
var fields = record.fields;
var tableActual = "<tr><td>" + record['created'].timestamp + "</td><td>" + fields['placeName'].value + </td></tr>
document.write(tableActual)
错误日志:
Uncaught (in promise) TypeError: Cannot read property 'timestamp' of undefined
at public-query.js:49:73
at Array.forEach (native)
at public-query.js:47:29
如果我删除例如<td>" + record['created'].timestamp + "</td>
,那么错误日志将显示下一个<td>
未定义。
需要明确的是,当前检索到的记录带有正确的时间戳,还有其他记录正在检索但现在没有检索到,代码没有变化。
我在第 3 行的不同部分在不同时间收到此错误(在实际代码中有 16 个字段/<td>
),即使我知道这些字段已填充到记录中,并且还检索了记录这些字段未填充。
知道这里发生了什么吗?这是 Cloudkit 的错误还是我做错了什么?
【问题讨论】:
您介意在bugreport.apple.com 发布一个错误,其中包含有关您的容器、记录类型等的更多私密细节吗? 嗨,戴夫,我发送了错误报告 【参考方案1】:如果您查看CloudKit Web Services Query Reference 底部的讨论部分,您会看到:
索引是异步更新的,因此不能保证它们是最新的。
您的查询中返回的某些记录可能被标记为已删除并且不包含其字段,因此您需要在假设字段存在并访问它们之前检查这一点。以下是您可能会看到的示例响应:
"records": [
"recordName": "195055b3-1db7-4d75-86f0-d9aef8d8381b",
"deleted": true
,
"recordName": "712525a8-eccf-4da7-b2d9-981f120bcc82",
"deleted": true
],
"total": 2
如果您检查这些对象上的已删除属性,那么您可以在处理或呈现数据时忽略它们。
【讨论】:
以上是关于无法从 Cloudkit Cloud (JS) 检索所有记录的主要内容,如果未能解决你的问题,请参考以下文章
CloudKit 无法从公共容器中获取数据。错误 1/4000
无法从 CloudKit 通知信息和用户信息结构中获取 CKRecord.ID
无法从应用程序扩展访问我的“CKContainer”中的任何数据 - CloudKit,Swift