我正在做一个关于CoreData的教程,他们谈到了“允许外部存储”选项。文档说“启用时,如果核心数据应该直接在数据库中保存数据,或者将URI存储到它为您管理的单独文件中,则核心数据启发式地决定每个值。您无法根据内容查询二进制数据属性,如果使用此选项。“我理解第一部分,但我不明白它们的意思是“如果使用此选项,则无法根据二进制数据属性的内容进行查询”。我觉得这很重要,但我无法理解。 “你不能根据二进制数据的内容进行查询”,这是什么意思?我不是,如果这是我的英语或其他东西,但我无法弄清楚。 该教程是Ray Wenderlich教程系列丛书中的“教程核心数据”。我强烈推荐!
答案 0 :(得分:2)
图像存储的NSData是带有exif标头的jpeg数据。
如果将数据存储在数据库中,则可以使用与所述exif数据匹配的谓词:例如像(伪)" jpgedData CONTAINS作者:dominik"
如果您将其存储为单独的文件,该查询将无法正常工作,因为数据并非真正在数据库中
[请注意,这是解释性伪代码,我无法真正想到一个实用/有用的例子]
答案 1 :(得分:1)
这意味着,如果为属性启用该选项,则在获取对象时不能在NSPredicate
中使用该属性。获取请求是一个查询,当您使用谓词时,您将根据它们是否与谓词匹配来获取对象。如果属性允许外部存储,则无效。
答案 2 :(得分:1)
好的,我想我明白了。基本上,您无法使用图像的原始元数据来查找特定图像,因为您无法访问原始数据。您只能访问URI。听起来合乎逻辑且对我公平,因为您可以提取元数据,并将其存储在CoreData模型中,然后将图像保存为可转换的(如果需要)。