Couldkit 查询和在 CKReference 字段上使用谓词的问题
Posted
技术标签:
【中文标题】Couldkit 查询和在 CKReference 字段上使用谓词的问题【英文标题】:Trouble with Couldkit Query and using predicates on field of CKReference 【发布时间】:2018-10-29 15:03:38 【问题描述】:我对 CKQuery 的工作原理有一个基本的误解。
我有 2 种记录类型:
-
朋友:包含字段
url_of_profil_pic
姓名
...
投票:包含字段
date_of_vote
target_of_the_vote(朋友 CK 参考)
the_one_who_vote(cloudkit 用户 ID)
当我在 Vote 表上查询时,我只是想知道如何获得 url_of_profil_pic
基本上,想要这样的东西:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"the_one_who_vote = %@", recordReference.recordID];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Votes" predicate:predicate];
query.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]initWithKey:@"createdAt" ascending:false]];
CKQueryOperation *operation = [[[CKQueryOperation alloc] initWithQuery:query] autorelease];
operation.desiredKeys = @[@"target_of_the_vote . url_of_profil_pic"];
operation.resultsLimit = 10;
operation.recordFetchedBlock = ^(CKRecord * _Nonnull record)
这一行将是为我提供 URL 的谓词。
operation.desiredKeys = @[@"target_of_the_vote . url_of_profil_pic"];
【问题讨论】:
【参考方案1】:假设您已获取记录,并且 url_of_profil_pic
是 CKAsset
,您必须将资产 URL 转换为 Data
对象,您可以将其保存到如下文件中:
//record is the CKRecord you fetched
if let asset = record["url_of_profil_pic"] as? CKAsset
do
try yourData = Data(contentsOf: asset.fileURL)
//Save yourData to disk...
catch
print("Error saving profile pic from CKAsset")
Apple 建议将任何超过 1MB 的内容保存为 CloudKit 上的 CKAsset
(docs)。
【讨论】:
它有效,非常感谢,正如你(和苹果)所说,我将使用 CKAsset :)以上是关于Couldkit 查询和在 CKReference 字段上使用谓词的问题的主要内容,如果未能解决你的问题,请参考以下文章
CloudKit - NSPredicate 用于在引用列表中查找包含多个 CKReference 的所有记录