gpt4 book ai didi

objective-c - 使用NSPredicate过滤核心数据中的对象

转载 作者:行者123 更新时间:2023-12-01 16:54:35 25 4
gpt4 key购买 nike

我有三个实体A,B,C。

它们之间的关系是:A <->> B,B <-> C。

A具有称为“类型”的属性。

A和B的关系是a2b,B和C的关系是b2c。 c_array是C对象的列表。

我正在尝试使用NSPredicate通过C和A的属性“类型”过滤A。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSMutableArray *parr = [NSMutableArray array];

for (C *c in c_array) {
[parr addObject:[NSPredicate predicateWithFormat:@"ANY a2b.b2c = %@", c]];
}

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSCompoundPredicate orPredicateWithSubpredicates:parr], [NSPredicate predicateWithFormat:@"type = %i", 0], nil]];

[fetchRequest setPredicate:predicate];

但是我得到的不是我所期望的。所以我也尝试了其他。
predicate = [NSPredicate predicateWithFormat:@"type=%i AND (0!=SUBQUERY(a2b,$a2b,$a2b.b2c IN %@).@count)", 0, c_array];

意外的结果再次发生!有人可以帮我吗? T

最佳答案

听起来好像您想反过来做。您已经有了C,并且根据所描述的关系,您的C类将具有B属性,而您的B类将具有A属性。因此,假设您已使用c2bb2a,则应如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"c2b.b2a.type == %@",[NSNumber numberWithInt:0]];

NSArray *result = [c_array filteredArrayUsingPredicate:predicate];

另外,我注意到您正在将 typeA属性与谓词中的int进行比较。只寻找i为0的 type==%i会返回 type中没有值的所有对象。因此,要么将 typeNSNumber对象进行比较,要么将 type.intValue与int进行比较。

关于objective-c - 使用NSPredicate过滤核心数据中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12855418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com