IOS /核心数据/ Objective-C:使用布尔值进行NSPredicate

时间:2018-03-24 21:41:45

标签: ios objective-c boolean nspredicate

在tableview的NSFetchedResultsController中,我试图过滤掉属性为true,1,yes,on或者其他的情况。

由于1)我的语法如何处理NSPredicatenil值或2),我不清楚null是否表现不佳,因为它不正确属性类型。

在xcdatamodeld文件中,该属性设置为Boolean。

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

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

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

我的NSPredicate代码是:

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

isprivate != 1

的身份登录到控制台

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

所以也许它解释nil或null值是错误的。

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

非常感谢有关如何过滤掉上面设置的布尔值为True的nsmanagedobjects的任何建议。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下代码,我通常使用Integer来表示bool值。不要忘记更改CoreData中的类型

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

答案 1 :(得分:0)

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

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

问题可能是您的财产isPrivate而不是isprivate