IOS/Core-data/Objective-C: NSPredicate with Boolean values



在表格视图的NSFetchedResultsController中,我试图过滤掉属性为真、1、是、开或其他什么的情况。

我不清楚NSPredicate是否因为 1) 我的语法如何处理nilnull值或 2) 因为它对属性类型不正确而没有按应有的方式运行。

在 xcdatamodeld 文件中,该属性设置为布尔值。

NSManagedObject类中,我使用了NSNumber属性 - 因为据我所知,没有布尔属性,应该替换NSNumber。

@property (nonatomic, strong) NSNumber *isprivate;//boolean in model.

在某些情况下,我将值设置为 @1。 但是,在其他情况下,它应该设置为 nil,尽管当我注销它时它显示为 null。 我想从 isprivate 的值为真的获取情况中排除,是的,@1 或其他什么。

我的 NSPredicate 代码是:

NSNumber *privVal = @1;          
NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate!= %@",privVal];

isprivate != 1身份记录到控制台

但是,它没有按预期工作。 它不会过滤掉 isprivate 为 1 的情况,而是过滤所有内容并且不返回任何结果。

所以也许它解释错误地解释了 nil 或 null 值。

第二种可能性是布尔/NSNumbers或其他任何东西的语法是错误的。

有关如何过滤掉上述布尔值设置为 True 的 nsmanaged 对象的任何建议,将不胜感激。

提前感谢您的任何建议。

当使用带有布尔值的谓词时,您可以使用@NO@YES

NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate == %@", @YES];我在这里回答了一个类似的问题 https://stackoverflow.com/a/29380640/4698501

问题可能是您的财产应该isPrivate而不是isprivate吗?

您是否尝试过下面的代码,我通常使用 Integer 作为布尔值。不要忘记更改 CoreData 中的类型

NSInteger privVal = 1;          
NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate != %d",privVal];

最新更新