IOS/Core-data/Objective-C: NSPredicate 布尔值

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

在表视图的 NSFetchedResultsController 中,我试图过滤掉属性为 true、1、yes、on 或其他任何情况的情况。

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

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

NSManagedObjectclass中,我用了一个NSNumber属性--因为据我所知,没有布尔值属性和一个应该替换 NSNumber.

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

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

我的 NSPredicate 代码是:

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

将控制台记录为 isprivate != 1

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

所以它可能错误地解释了 nil 或 null 值。

第二种可能是 Boolean/NSNumbers 或其他语法错误。

对于如何过滤掉布尔值设置为 True 的 nsmanagedobjects 的任何建议,我们将不胜感激。

提前感谢您的任何建议。

你试过下面的代码了吗,我通常使用 Integer 作为 bool 值。不要忘记更改 CoreData

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

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

NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate == %@", @YES]; 我在这里回答了类似的问题

问题是您的 属性 应该是 isPrivate 而不是 isprivate 吗?