如何将谓词(需要KVC)用于像ABRecord这样的CF对象?

时间:2011-04-16 02:17:40

标签: nspredicate core-foundation abaddressbook abrecord

我正在开发一个基于ABAddressBook的应用程序。 我想使用谓词来评估或比较abaddressbook中的对象。但似乎ABAddreesBook是一个核心基金框架,并不支持KVC。这是否意味着我不能在我的应用程序中使用谓词?

或者还有其他方法可以做谓词吗?

1 个答案:

答案 0 :(得分:2)

简短的回答是:你做不到。

答案很长:你可以,但这是很多的工作。我可能会做这样的事情:

  1. 递归所有NSExpressions谓词以聚合所有-keyPath字符串并将其存储在数组中。这些将是您要查询的ABRecord个对象的属性。
  2. 遍历您的ABRecord个对象数组,并创建一个字典来表示每个对象。这个字典将具有recordID以及你想要的每个“keypaths”的ABRecordCopyValue()值,键入属性名称。
  3. 这些词典将聚合在一个数组中。
  4. 这个新的数组(字典)将使用谓词
  5. 进行过滤
  6. 过滤后,减少的字典数组将转换回ABRecord个对象数组并返回。
  7. 这听起来像个有趣的问题。我会更多地考虑这个问题,或者回过头来编辑我的答案。