在表格视图的NSFetchedResultsController
中,我试图过滤掉属性为真、1、是、开或其他什么的情况。
我不清楚NSPredicate
是否因为 1) 我的语法如何处理nil
或null
值或 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];