问题标签 [ckquery]

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.

0 投票
1 回答
418 浏览

ios - 在 CloudKit 中使用比较谓词进行查询

我在Cloudkit中有一些CKRecords,记录有两个int类型的属性,可能称为'cost'和'price',我想查询'cost'>'price'的记录,但是当我写一个时应用程序崩溃了像这样查询:

这是 Xcode 给出的崩溃信息:

由于未捕获的异常'CKException'而终止应用程序,原因:'无效的谓词,无效的右表达式,不是函数表达式

请帮助,提前谢谢。

0 投票
2 回答
573 浏览

arrays - Swift 谓词仅匹配值数组中的第一个值

我有一个类Download作为CKQueryOperation. 其中一个 inits 允许我使用一组值构建我的谓词:

当我测试它时,query只匹配数组中的第一个值。因此,如果queryValues = [testValue0, testValue1]我有一个字段匹配的记录,testValue0并且我有第二个匹配的记录testValue1,则只会发现第一条记录。如果我切换订单,则另一条记录会被识别。

我可以使用数组创建谓词但只有第一个值匹配,这似乎很奇怪。文档说值是按照它们出现的顺序替换的,但它不应该继续移动到第二个值吗?

对于更多上下文,每条记录都存储在一个单独的数据库中(私有与公共),如果param 为 nil ,我的Download班级会启动两个独立CKQueryOperations的两个都依赖的数据库。无论哪个操作失败,最终都找不到与第一个值匹配的结果,然后在检查第二个值之前放弃。querydatabase

如果需要,我可以包含“下载”的完整代码和失败的单元测试。

0 投票
1 回答
379 浏览

swift - 具有多种记录类型的 Swift CKQuery

所以我在查询特定记录类型和解析它们的数据方面做得很好。我不知道的是如何在所有记录类型中搜索,例如,今天修改的所有内容,无论它是什么记录类型。

想法?

0 投票
1 回答
321 浏览

swift - 将多个字段添加到 CloudKit 中的同一记录名称行

我正在尝试将多个值保存到 CloudKit(名称、用户名、积分)。但是,当我保存它们时,它们分别保存在 3 个不同的行中,如下所示:

在此处输入图像描述

我想将 Name、Username 和 Points 字段合并为一行,以便将它们一起加载。

这是我的保存代码:

有人可以演示如何将这些记录一起保存而不是单独保存吗?

除此之外,我目前在它们应该在一起时单独加载它们......加载代码:

我希望在保存和加载过程中将我的数据组合在一起。

PS如果它可以帮助任何人更好地理解,我正在尝试制作一个包含所有用户姓名或用户名及其积分的公共排行榜。

0 投票
1 回答
126 浏览

ios - CloudKit Notifications not delivered to all devices

I have the problem that CloudKit notifications are not delivered to all devices when my app was started on the device. However, everything works fine if the app has been started from XCode.

In specific:

  • Device A saves a record
  • On the server, there is a CKQuerySubscription that fires a notification on record change
  • According to the server log, this notification gets pushed
  • However, device B will only receive the notification if the app got started from XCode. It will not if it got started from the home screen.
  • To make it perfect: If I save a record on device B (no matter if the app got started from Xcode or home screen), device A will always receive the notification.

Would be glad to receive any hint notifications ;-) Udo

0 投票
1 回答
534 浏览

ios - 在 CloudKit 谓词中使用包含比较数组的 CONTAINS 或 ANY

我尝试使用NSCompoundPredicate(orPredicateWithSubpredicates:)withCloudKit NSPredicate但后来我在 Apple 的文档中读到OR不支持比较谓词,CloudKit所以我遇到了障碍。

我有一个数组CKReferences,我需要查看 a Record-typeof是否Reference list包含这些引用。

我正在为如何组装谓词本身而苦苦挣扎,因为我试图避免completionBlock.

假设我有以下引用数组:

我尝试了以下方法,但没有成功,因为它只查找数组的第一个对象,而不是整个数组。

在这里,如果我打印predicate它会打印:

表名包含CKReference:0x600000229c40;20B54862-46CC-405F-BAE8-0DC8D3A52F78:(_defaultZone: defaultOwner )>

如您所见,它只查找数组中的第一个对象。

如果我ANY在谓词中使用运算符,它可能会起作用,例如:

但我的问题是如何构建该谓词,因为refs数组是动态的,我不知道它可能包含多少个对象,因此我不知道如何构建对数组的predicate args访问。[0], [1], ...refs

你有什么解决方法吗?还是解决此问题的最佳方法?

谢谢你。

编辑

我想出了解决这个问题的方法,但我不知道这是否是最有效的方法,所以我仍然愿意接受答案和意见。

这是我的临时解决方案:

0 投票
1 回答
172 浏览

nspredicate - CloudKit 查询:在日期之后且不在数组中

我正在尝试从 CloudKit 查询记录,这些记录要么modificationDate比我在本地拥有的记录更新,要么可能根本没有。

我已经拥有的记录存储在recordNames. 日期是date

我可以用这样的两个谓词来做到这一点:

但是,当我尝试将其组合为复合OR谓词或将它们组合成单个谓词时,出现错误:

无效谓词... CKErrorDomain Code=12... 不是比较谓词,ck_isComparisonError=true

我在文档OR中看到不允许做谓词。我希望不必在这里进行两个单独的查询。关于如何解决这个问题的任何想法?

0 投票
1 回答
294 浏览

cloudkit - CloudKit 服务器拒绝请求:未知字段记录名称

CKQuery在 Swift 4 中这样做:

...我得到了这个CKError

CKError(_nsError:CKError 0x60000024dce0:“服务器拒绝请求”(15/2000);服务器消息=“未知字段'recordName'”;uuid = BCD7C8DA-04B0-4422-8A24-F6479D234706;容器ID =“...”)

查询时是否需要使用特殊键recordName

0 投票
1 回答
606 浏览

ios - CloudKit“订阅重复”错误 - 获取 SubscriptionId

我正在尝试将 a 保存CKQuerySubscription到公共数据库 - aCKError返回带有以下信息:

属性ancestorRecordclientRecord和对象serverRecord都是。CKErrornil

如何从此错误(即C82E82EF-F373-4D75-A465-65364D8FEB12)中获取服务器上存在的查询的 ID。有没有我想念的财产?

0 投票
1 回答
783 浏览

swift - 将 Cloudkit 资产用作 UIimage

我将图像作为资产保存在 CloudKit 中。每条记录还有其他属性。我可以收集记录并使用其他属性,但我无法在我的 ImageView 中使用该资产。我是 Swift 编程的新手,因此我收到的错误没有任何意义。

我得到的错误是在这一行:

它说:

我试图从主线程中删除它,但我收到了同样的错误。