核心数据转换器

Posted

技术标签:

【中文标题】核心数据转换器【英文标题】:Core Data Transformer 【发布时间】:2012-10-16 14:09:04 【问题描述】:

我想用NSValueTransformer 类加密一些核心数据列,但我不太确定要使用什么加密方法。有没有人在使用 Core Data 时尝试过加密单个实体,如果是,是否有任何工作实现的示例代码?我希望加密不会干扰我稍后用来从数据库取回数据的任何NSPredicates

【问题讨论】:

在这种情况下,加密是什么意思? 嗯,我的意思是目前 sqlite db 核心数据持续存在,任何人都可以读取。我希望每个条目都按照 AES256 级别加密的方式进行保护 【参考方案1】:

来自 Apple 的 iPhoneCoreDataRecipes 示例代码有一个使用 NSValueTransformer 的子类以及模型中的可转换属性的示例。查看可转换的属性类型设置:

以及价值转换器的实现:

在您的情况下,您需要分别在 transformedValuereverseTransformedValue 方法中提供加密和解密算法,沿线 suggest here。

【讨论】:

我试图这样做,但是当我尝试从数据库查询中取回排序的结果集时,我的 NSFetchedResultsController 取回结果时遇到了问题。看来变压器干扰了这一点。你知道为什么吗? 是的,一个常规的 fetch 请求让我返回一个托管对象数组。但是当我尝试对实体中任何条目的名字进行排序和按键路径部分时,NSFetchedResultsController 没有得到任何结果 奇怪。听起来像是框架中的错误。使用NSFetchedResultsController 时是否调用过NSValueTransformer 的方法?替代加密是使用 NSFileProtection 属性之一加密整个核心数据存储。问题是它要求用户在设备上设置密码。 是的,方法正在被断点确认调用。 NSFileProtection 属性显然不够好,每个数据库条目都必须按照要求进行加密。我真的很茫然,因为我读过其他人遇到这个问题但没有解决方案。这个人在这里有类似的问题***.com/questions/12845831/… 有没有办法在 nsfetchedresult 控制器返回搜索结果后以某种方式对部分标签进行排序/分配?

以上是关于核心数据转换器的主要内容,如果未能解决你的问题,请参考以下文章

为啥核心数据不会触发我的价值转换器?

如何将sqlite db转换为ios中的核心数据

如何更新核心数据中的可转换属性

是否可以访问核心数据中的原始数据以获取可转换属性

核心数据 changedValues 是不是忽略二进制数据和转换后的属性?

核心数据和可转换以检索图像