CloudKit创建订阅时NSArray<Double>的NSPredicate使用报错如何解决?
CloudKit数字类型数组的NSPredicate正确写法
报错原因
- 你使用的
CONTAINS运算符不符合CloudKit服务端谓词规则:CloudKit中CONTAINS仅用于字符串子串匹配,判断数组是否包含指定元素需要使用ANY关键字 - 谓词格式符
%@要求传入对象类型,你直接传入Double值类型,会导致服务端无法识别参数,触发"Missing filter value"报错 - 匹配
recordID字段需要传入CKRecordID类型对象,你直接传入字符串类型的recordName不符合参数要求
正确代码示例
// 将Double值转为NSPredicate兼容的NSNumber对象 let targetValue = NSNumber(value: Double(0)) // 用recordName构造合法的CKRecordID对象 let targetRecordID = CKRecordID(recordName: self.recordName!) // 用ANY关键字匹配数组包含指定元素的场景 predicate = NSPredicate(format: "ANY PercentDone == %@ AND recordID == %@", targetValue, targetRecordID)
补充场景适配
如果需要匹配数组所有元素都等于0的需求,可以将ANY替换为ALL关键字:
predicate = NSPredicate(format: "ALL PercentDone == %@ AND recordID == %@", targetValue, targetRecordID)
内容的提问来源于stack exchange,提问作者Nakia
相关产品推荐
相关产品推荐

