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_picCKAsset,您必须将资产 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 的所有记录

从 CKReference 中获取 CKReference 对象

如何从 CKReference 对象中获取引用字符串

设置 CKReference 未保存

CloudKit CKReference 列表

CKReference .DeleteSelf 属性无效