Ios 创建将对象传递给实例方法的NSPredicate

Ios 创建将对象传递给实例方法的NSPredicate,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,我创建了一个名为TItem的NSManagedObject。对于该对象,我添加了一个助手实例方法,如下所示: - (BOOL) isItemForUser:(TUser *)user; fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isItemForUser:%@ == YES",self.user]; isItemForUser将TUser对象中的各种属性与自身进行比较,并根据比较结果返回布尔值 我想创建一个谓词,该

我创建了一个名为TItem的NSManagedObject。对于该对象,我添加了一个助手实例方法,如下所示:

- (BOOL) isItemForUser:(TUser *)user;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isItemForUser:%@ == YES",self.user];
isItemForUser将TUser对象中的各种属性与自身进行比较,并根据比较结果返回布尔值

我想创建一个谓词,该谓词能够将TUser对象传递给该方法,这样我就可以找到在传递给定对象时返回YES的所有TItem对象。本质上,我想做如下事情:

- (BOOL) isItemForUser:(TUser *)user;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isItemForUser:%@ == YES",self.user];
上面的语法显然是不正确的,但我正在寻找一个具有相同精神的东西。有什么想法吗


谢谢

我将探索在谓词中的isItemForUser方法中执行任何比较。也许可以简化数据模型以使比较更容易?例如,添加一些映射到用户并在创建对象时计算的新属性。通过这种方式,比较非常简单。

功能就是您想要的:

[NSPredicate predicateWithFormat:@"FUNCTION(SELF, 'isItemForUser:', %@) == YES", self.user]
然而,有两点需要注意:

isItemForUser:必须返回NSNumber,而不是BOOL 我99.9999%确定这不会作为获取请求谓词的一部分工作
这是一个有趣的想法。它确实破坏了我所寻找的一些封装。此方法将用户的性别和年龄与其自己的属性进行比较。它基本上回答了这个问题:例如,这个滴度适合30岁以上的男性吗。所以我想让滴度本身用这个方法来确定。如果我想理解您的意思,您建议只公开TItem的forGender和follow属性,然后构建一个复合谓词,创建与isItemForUser当前计算的逻辑表达式相同的逻辑表达式?谢谢你的建议!