【问题标题】:NSPredicate find object with attribute in NSSetNSPredicate 在 NSSet 中查找具有属性的对象
【发布时间】:2013-11-23 04:53:22
【问题描述】:

我有一个 NSMangedObject,其中包含 NSSet 和其他 NSManagedObjects

我需要检查这些对象是否在NSSet 中有值,然后返回它们。

我使用 MagicalRecord 来获取数据。

所以我需要这样的东西:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stringObjects contains %@", string];

所以如果 NSSet stringObjects 包含一些我正在寻找的字符串,那么返回我请求的对象。

这里有一个注意事项:stringObjects(例如,它代表我的NSSet)它是包含 NSManagedObjects 的 NSSet,所以我需要通过一些 id(例如 string_id 属性)搜索它们。

那么模型看起来像这样

NSSet *set = MainObject.stringObjects;
NSString *string_id_for_first_object = [[[set allObjects] objectAtIndex:0] string_id];

只是为了更好地理解关系。

但问题是如何创建谓词来检查 NSSet 是否包含所需的 id。

【问题讨论】:

  • 一个集合没有顺序,所以第一个对象实际上是任何人

标签: ios core-data nspredicate nsset


【解决方案1】:

如果我正确理解您的问题,stringObjects 是一对多关系 从一个实体A到另一个实体BB有一个属性string_id

要查找与具有给定string id 的任何B 对象相关的所有A 对象,请使用:

NSString *stringId = …; // The string that you are looking for
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY stringObjects.string_id == %@", stringId];

【讨论】:

  • 按照您的描述进行操作后是否有任何选择,然后扩展谓词以仅返回 B 中符合该条件的对象?换句话说,我想在获得所有具有 stringObjects.string_id == %@ 的 A 之后,对 stringObjects 的引用只有来自集合中的 B 的结果 - 具有 string_id == %@。因为在这种类型的提取之后,您将正确获得所有 A,但是当使用 A.stringObjects 进行操作时,您将始终获得与 A 相关的所有 B,而不仅仅是来自主提取的具有 string_id == %@ 的那些。谢谢
  • @cybercow:不,这是不可能的。提取请求不能返回“修改”对象。 - 如果你需要这样的东西,那么你最好直接获取具有给定 string_id 的 B 对象。
  • 非常感谢您的回答,我最终在 A 的初始获取请求后直接在 B 的 NSSet 上使用谓词搜索并且工作正常。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 2014-11-22
  • 2013-12-12
  • 2016-10-31
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多