问题标签 [ckqueryoperation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cloudkit - CloudKit:删除记录的 CKQueryOperation
有没有一种方法可以在不使用的情况下查询 CloudKit 以获取最近删除的项目(可能来自特定的时间戳)CKFetchRecordChangesOperation
?我正在使用公共数据库,所以我不能使用自定义区域(这将是 的要求CKFetchRecordChangesOperation
)......所以我需要一种方法来用公共数据库模拟这个。
我希望能够针对 CloudKit 记录中的更改有效地更新我的本地核心数据缓存。当您查询 CloudKit 记录时,CKRecord 似乎有一个creationDate
andmodificationDate
属性,可以查询该属性以查看最近创建/修改的记录,但这不适用于在 CloudKit 中删除的记录。
这里有什么有效的策略?
ios - CKQueryOperation 随机出现错误“请求中不存在任何操作”
我正在尝试使用下面的代码片段从云服务器获取一些记录。它在大多数情况下返回没有任何错误的记录:
但有时,它会返回错误:
{
NSDebugDescription = "CKInternalErrorDomain: 1009";
NSLocalizedDescription = "请求中没有操作";
NSUnderlyingError = "错误域=CKInternalErrorDomain Code=1009 \"请求中没有操作\" UserInfo={NSLocalizedDescription=请求中没有操作}";
}
我检查了错误代码,它是CKErrorInvalidArguments
,正如文档所说
错误的客户端请求(错误的记录图、格式错误的谓词)
我不知道这个错误是怎么来的以及如何处理这个错误,与错误不同,它对我在一段时间后发送请求CKErrorNetworkUnavailable
没有CKErrorRetryAfterKey
价值。error.userInfo
顺便说一句,当我收到这个错误时,我的所有操作都会有这个错误,没有返回任何记录。
swift - CloudKit 按最旧修改记录查询
我正在使用 CloudKit 并尝试通过“modificationDate”来完善记录,但将从最旧的开始填充我的结果限制。例如,如果我在周一、周二、周三、周四创建了 4 条记录,而我只选择其中两条,我将获得周一、周二的记录,而不是周三的周四。下面是我要修复的代码。
}
我认为这就像将NSSortDescriptor
升序标记为 false 一样简单。但这不起作用(经过更多测试,我发现这将只返回所选字段值为 0 的记录)。
此外,我尝试了一些各种谓词比较无济于事。有什么想法吗?我准备永远放弃 CloudKit。
ios - CloudKit 中的记录不能超过 100 条
我尝试了许多不同的方法来获取记录并检查了 stackoverflow 上的相同问题,但不能获取超过 100 条记录。
之前,我使用 CKQuery 而不是 CKQueryOperation 来使用resultsLimit
参数。
这是我的代码:
performance - 云套件。第一次连接到容器数据库很慢
我的问题是关于 cloudkit 以及我在运行 CKQueryOperation 从公共数据库中获取记录时的延迟。
我已经进行了很多测试,当然,这只发生在我第一次运行或很长时间没有使用该应用程序时。在这种情况下,当我运行查询时,我必须等待几秒钟才能获取记录。但是,如果我在几秒钟后重复请求(或者如果我取消第一个请求并再次启动它),那么一切都会快速而完美。
cloudkit 是否对已经启动的查询有任何“缓存”,以便下次(短期内)更快?或者有什么关于第一次建立连接然后这个连接保持活动状态的吗?
我真的尝试了很多东西,结果总是一样的。
请问,您对这种行为有任何线索吗?
swift - CloudKit CKQueryOperation 没有获取所有记录
CloudKit 中的 RecordType 是 100 多条记录。以下代码仅从这 11 条记录中获取,它们不是前 11 条记录,它们是从记录的开头、中心和结尾随机选择的。我无法理解代码中有什么问题。
编辑:我通过将 .reseltsLimit 更改为 5000 来实现它!
arrays - Swift 谓词仅匹配值数组中的第一个值
我有一个类Download
作为CKQueryOperation
. 其中一个 inits 允许我使用一组值构建我的谓词:
当我测试它时,query
只匹配数组中的第一个值。因此,如果queryValues = [testValue0, testValue1]
我有一个字段匹配的记录,testValue0
并且我有第二个匹配的记录testValue1
,则只会发现第一条记录。如果我切换订单,则另一条记录会被识别。
我可以使用数组创建谓词但只有第一个值匹配,这似乎很奇怪。文档说值是按照它们出现的顺序替换的,但它不应该继续移动到第二个值吗?
对于更多上下文,每条记录都存储在一个单独的数据库中(私有与公共),如果param 为 nil ,我的Download
班级会启动两个独立CKQueryOperations
的两个都依赖的数据库。无论哪个操作失败,最终都找不到与第一个值匹配的结果,然后在检查第二个值之前放弃。query
database
如果需要,我可以包含“下载”的完整代码和失败的单元测试。
ios - CKError:查询过滤器超出了值的限制:容器为 250
我想从公共数据库中提取大约 500 条“访问”记录。CloudKit 一次只给你 100 条记录,所以我只使用下面的 CKQueryCursor 来获取我想要的所有记录。
我将函数称为:
效果很好,它可以获得我需要的所有访问。控制台日志
但问题是现在我想在按下按钮时刷新,现在它给了我这个错误:
“服务不可用”(6/2022);"请求失败,http 状态码 503"; 30.0 秒后重试
这很不言自明,我想我通过请求微不足道的 500 条记录来压倒服务器?所以我等待 30 秒并再次调用该函数,现在我得到了这个错误。
“超出限制”(27/2023);服务器消息 =“查询过滤器超出了值的限制:容器为 250
由于某种原因,我无法再次运行该功能。如果我重新启动应用程序,它会再次正常工作,但只是第一次。这个问题似乎特定于任何返回 CKQueryCursor 的表。我有其他我正在访问的表少于 100 条记录(因此光标为零),我可以多次提取这些表而不会出现任何问题。
ckmodifyrecordsoperation - CKQueryOperation 在 CKModifyRecordsOperation 之后
在我的应用程序中,我需要在将自定义区域(~12)写入私有数据库后不久获取所有记录。这些操作都是通过依赖关系同步的。通过 CKModifyRecordsOperation 写入云的数据在仪表板中可见,并通过完成处理程序中的正确结果进行验证。我的问题是 CKQueryOperation 不返回刚刚写入的记录。如果我以某种方式延迟了对 CKQueryOperation 的调用,那么它可以工作。这几乎听起来像是在写入和读取之间存在某种延迟。
我已经查看了所有文档,除了基于操作的依赖机制之外,我看不到同步读取和写入的方法。
我错过了什么?
请帮忙!
拉蒙。
编辑:
您好,我发现更多证据表明使用 CloudKit 时存在一些未确定的延迟。SO 中的一个线程建议拼接记录以避免延迟问题。在我的情况下,“缝合”技术绝对是可能的。因此,我重新编写了代码以利用该技术。而且,基本上,通过避免加载所有记录的需要,完全绕过了延迟。
这是链接:拼接记录
swift - CloudKit:查询返回部分结果,没有错误
我有某种 CloudKit 索引问题。当我使用 CKModifyRecordsOperation 将记录保存到 iCloud 时,modifyRecordsCompletionBlock 不会返回任何错误。当我使用 NSPredicate(value: true) 或 Dashboard 查询这些记录时,大多数情况下它会丢失一两条记录。
假设我上传了 5 条记录(没有错误),等待一段时间(~15 秒)以确保索引已更新,然后查询它们(通过仪表板或应用程序的 CKQueryOperation)。大多数情况下,它会显示 5 条记录中的 4 条记录。同样,没有错误。记录在 customZone 的 privateDB 中。
奇怪的是:我总是能够通过在“获取”菜单下的仪表板(开发)中手动键入记录名称来获取查询未返回的记录。所以它存储它们,只是不查询。当我删除仪表板中的索引并重新分配它们时,仪表板查询将开始返回所有结果(以前也省略了记录),但是在再上传几次后,查询中又会开始丢失一些结果。
这是我的 CKModifyRecordsOperation:
我尝试了记录字段(最初是日期、资产和参考),试图查看是否有任何字段出现问题。但即使我删除了所有字段(创建一个没有额外字段的记录,只是系统元数据),问题仍然存在。我没有包含 CKQueryOperation 代码,因为 Dashboard 的行为方式与应用程序相同。
有任何想法吗?
编辑:这是我的获取功能的基本内容: