首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取使用`CKRecord.encodeSystemFields`编码的CKRecord的CoreData fetch请求

获取使用`CKRecord.encodeSystemFields`编码的CKRecord的CoreData fetch请求
EN

Stack Overflow用户
提问于 2018-04-24 00:07:44
回答 1查看 185关注 0票数 1

假设我有一个带有属性systemFields的托管对象,其中编码了CKRecord系统字段。

使用我从订阅通知中得到的CKRecord查询以前保存的实体的效率如何?

是否可以为NSFetchRequest设置谓词以查询现有的CoreData实体by CKRecord

代码语言:javascript
复制
class FailureCDEntity: NSManagedObject {

   @NSManaged private (set) var summaryDescription: String
   @NSManaged private (set) var creationDate: Date
   @NSManaged private (set) var systemFields: Data

   convenience init(record: CKRecord, in context: NSManagedObjectContext) throws {
      try self.init(in: context)
      systemFields = record.encode()
      ...
   }
}

CKRecord扩展:

代码语言:javascript
复制
extension CKRecord {

   func encode() -> Data {
      let data = NSMutableData()
      let archiver = NSKeyedArchiver(forWritingWith: data)
      archiver.requiresSecureCoding = true
      encodeSystemFields(with: archiver)
      archiver.finishEncoding()
      return data as Data
   }
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-24 00:26:45

二进制字段的谓词与其他类型的字段具有相同的限制,但二进制的性质使它们更难构造。如果您可以确保您的encode()方法将为存储的对象和通知中的对象生成完全相同的结果,那么您可以使用一个简单的谓词来匹配systemFields的值。如果不是,您唯一的选择取决于是否了解二进制编码的细节。你能使用“start with”谓词吗?也许是“以”结尾?如果不知道如何根据二进制表示的子集来匹配值,这是不可能的。

因此,依赖于二进制域的谓词很难或不可能使用。如果您能够描述如何基于二进制编码匹配值,那么您可能会想出一个谓词来实现这一点。否则,将需要其他一些技术。我对CKRecord还不够熟悉,无法说出那是什么。也许可以存储记录ID并与之匹配?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49985474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档