Ios 如何捕获CoreData警告?

Ios 如何捕获CoreData警告?,ios,core-data,tdd,bdd,nsvaluetransformer,Ios,Core Data,Tdd,Bdd,Nsvaluetransformer,我在练习BDD。我有一个名为Foobar的实体,它包含一个名为qux的可转换属性,我(使用核心数据模型编辑器)将其指定为quxtobazTransformer。关键是,QuuxtoazTransformer不存在。核心数据应该通过我的测试,并告诉我需要实现它 令人惊讶的是,测试通过了:myFoobar似乎已经存储,核心数据只是作为警告告诉我: 如何捕获此警告并使其成为测试失败?我不知道您是否可以捕获此警告。不过,您可以通过执行以下操作来测试值转换器的存在性 使用entitiesByName方法从

我在练习BDD。我有一个名为
Foobar
的实体,它包含一个名为
qux
的可转换属性,我(使用核心数据模型编辑器)将其指定为
quxtobazTransformer
。关键是,
QuuxtoazTransformer
不存在。核心数据应该通过我的测试,并告诉我需要实现它

令人惊讶的是,测试通过了:my
Foobar
似乎已经存储,核心数据只是作为警告告诉我:


如何捕获此警告并使其成为测试失败?

我不知道您是否可以捕获此警告。不过,您可以通过执行以下操作来测试值转换器的存在性

  • 使用
    entitiesByName
    方法从模型中获取所有实体的列表
  • 在上一步返回的字典中查找此实体的
    NSEntityDescription
  • 使用
    attributesByName
    获取实体描述中的所有属性
  • 使用
    NSAttributeDescription
    上的
    valueTransformerName
    在使用它的属性上获取值转换器类的名称
  • 使用
    NSClassFromString
    验证值转换器类是否存在
  • 如果值转换器类存在,您将在步骤5中得到非nil结果

    您还可以将此实现为一个更通用的检查,以查找所有值转换器来验证所有值转换器。为此,只需遍历
    entitiesByName
    返回的每个实体,然后遍历
    attributesByName
    返回的每个属性(而不是按名称查找已知实体和属性)。每当您找到一个值转换器时,检查该类是否存在(我猜,它是
    NSValueTransformer
    的子类),以确定测试是否应该通过

    xctest[99290:303] CoreData: warning: no NSValueTransformer with class name
    'QuuxToBazTransformer' was found for attribute 'quux' on entity 'Foobar'