gpt4 book ai didi

ios - NSCompoundPredicate 混合 AND 和 OR

转载 作者:行者123 更新时间:2023-12-01 15:56:14 24 4
gpt4 key购买 nike

我已经开始使用 NSCompoundPredicate 来组合我的谓词,但是有一个问题。

这是一个谓词的例子:

Aircraft *obj = (Aircraft *)[self.managedObjectContext objectWithID:objID];
if ([predicateAircraft.predicateFormat isEqualToString:@""] || !predicateAircraft)
predicateAircraft = [NSPredicate predicateWithFormat:@"aircraft = %@", obj];
else
{
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"aircraft = %@", obj];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:predicateAircraft, newPredicate, nil]];
predicateAircraft = compoundPredicate;
}

AircraftNSManagedObject 的子类。这个谓词效果很好,我只是循环遍历一些 Aircraft 对象,然后将每个对象添加到谓词中,所以如果 aircraft1 OR aircraft2 OR 等等......

我为多个属性执行此操作,代码与上面相同,但为不同的关系等创建谓词。基本上,这样用户就可以过滤他们看到的数据,例如哪架飞机。

无论如何,一旦我为其中的每一个构建了一个谓词,我就会像这样组合它们:

NSPredicate *predicateFinal = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:predicateAircraft, predicateBatteries, predicatePilot, nil]];

这一次,使用AND 将它们结合起来。但是,使用此谓词根本不会过滤我的数据。它们单独工作,但在最后一行中没有一次组合在一起。任何想法为什么?这就是我需要解决的问题。

我有一种预感,它是否正在创建这个:aircraft1 OR aircraft2 OR ... AND ... pilot1 OR pilot2 OR...

通常您需要在每一位周围加上括号,例如在飞机和飞行员周围将它们分开,但化合物不会这样做吗?

实际上我得到的是:

aircraft = aircraftObj1 OR aircraft = aircraftObj2 AND pilot = pilotObj1 OR pilot = pilotObj2

我需要的(我认为的):

(aircraft = aircraftObj1 OR aircraft = aircraftObj2) AND (pilot = pilotObj1 OR pilot = pilotObj2)

无论如何,有什么想法吗?谢谢。

编辑:

predicateFinal 记录为:TRUEPREDICATE。关于它的内容不多,但显然是 TRUEPREDICATE:一个始终计算为 TRUE 并且是谓词 bool 值的谓词。天知道为什么要返回?!想必返回 true 是 fetch 结果没有视觉变化的原因吧?因为返回时没有变化,所有对象都被提取。

编辑 2:

现在真正的进步。我已经解决了 battery 对象作为 NSSet 对多关系的一部分但执行 ANY battery 的任何问题。但它揭示了下一个问题(可能是一直以来的问题)。

最佳答案

事实证明,NSCompoundPredicate 返回了 TRUEPREDICATE,因为我的复合中的第一个子谓词是 nil。 (简单嗯?Doh!)因此,如果第一个子谓词为 nil,则其他子谓词是否为 nil 并不重要,它会停在那里并返回 TRUEPREDICATE 并且不会过滤您的提取。

关于ios - NSCompoundPredicate 混合 AND 和 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135421/

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