如何在Xamarin.iOS中仅通过Key从CloudKit检索记录?
解决方案
获取特定记录类型的全部记录
要获取CloudKit中某一特定记录类型的所有记录,你可以使用**TRUEPREDICATE**作为查询谓词,这是CloudKit中匹配该类型下所有记录的标准写法。对应的Xamarin iOS代码示例如下:
// 替换为你要查询的记录类型名称 string recordType = "YourTargetRecordType"; // 创建匹配所有记录的谓词 NSPredicate predicate = NSPredicate.FromFormat("TRUEPREDICATE"); // 构建CKQuery对象 CKQuery query = new CKQuery(recordType, predicate); // 执行查询(示例使用私有数据库区域) CKDatabase privateDB = CKContainer.DefaultContainer.PrivateCloudDatabase; privateDB.PerformQuery(query, null, (records, error) => { if (error != null) { // 处理查询错误 Console.WriteLine($"查询失败: {error.LocalizedDescription}"); return; } // 遍历返回的所有记录 foreach (CKRecord record in records) { // 检查当前记录是否包含目标Key if (record.ContainsKey("YourTargetKey")) { var targetValue = record["YourTargetKey"]; // 在这里处理获取到的Value } } });
优化方案:直接筛选包含目标Key的记录
如果你的目标仅为获取包含指定Key的记录,无需先拉取全部记录再本地筛选,可以直接用谓词过滤掉不包含该Key的记录,减少网络传输数据量:
string targetKey = "YourTargetKey"; // 谓词:匹配包含目标Key且值不为空的记录 NSPredicate predicate = NSPredicate.FromFormat("%K != NULL", targetKey); CKQuery query = new CKQuery(recordType, predicate);
补充提示
TRUEPREDICATE是CloudKit内置的特殊谓词,专门用于匹配指定记录类型下的所有记录,无需提前知晓任何记录ID或字段值。- CloudKit默认查询最多返回100条记录,若你的记录数量超过限制,需要使用
CKQueryOperation并设置Cursor来分页获取全部数据。
内容的提问来源于stack exchange,提问作者Pavlos Mavris
相关产品推荐
相关产品推荐

