在表视图的NSFetchedResultsController中,我试图筛选出属性为true、1、yes、on或其他类型的情况。
我不清楚NSPredicate是否没有发挥应有的作用,因为1)我的语法是如何处理nil或null值的,还是2)它对属性的类型不正确。
在xcdatamodeld文件中,属性设置为布尔值。
在NSManagedObject类中,我使用了一个NSNumber属性--因为据我所知,没有布尔属性,而且应该用一个属性替换NSNumber。
@property (nonatomic, strong) NSNumber *isprivate;//boolean in model.在某些情况下,我将值设置为@1,但在其他情况下,应该将其设置为零,尽管当我将其注销时,它显示为null。我想从获取的情况中排除是true值为true的情况,是的,@1或其他什么的。
我的NSPredicate代码是:
NSNumber *privVal = @1;
NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate!= %@",privVal];哪个日志以isprivate != 1的形式记录到控制台?
然而,它并没有按照预期的方式工作。它没有过滤出isprivate为1的情况,而是过滤所有内容,不返回任何结果。
因此,它可能是错误地解释为零或空值。
第二种可能是,对于布尔/NSNumbers或其他任何东西,语法都是错误的。
如果上面的布尔值设置为True,您将希望得到关于如何筛选出nsmanagedobjects的任何建议。
谢谢您的建议。
发布于 2018-03-25 06:51:50
当使用带有布尔值的谓词时,可以使用@NO或@YES。
NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate == %@", @YES];,我在这里回答了一个类似的问题,https://stackoverflow.com/a/29380640/4698501
问题是您的属性应该是isPrivate而不是isprivate吗?
发布于 2018-03-25 01:48:27
您是否尝试了下面的代码,我通常使用Integer作为bool值。不要忘记更改CoreData中的类型
NSInteger privVal = 1;
NSPredicate *securePred = [NSPredicate predicateWithFormat:@"isprivate != %d",privVal];https://stackoverflow.com/questions/49470235
复制相似问题