代码之家  ›  专栏  ›  技术社区  ›  user6631314

IOS/核心数据/目标-C:使用布尔值预测

  •  0
  • user6631314  · 技术社区  · 8 年前

    NSFetchedResultsController 对于tableview,我试图过滤出属性为true、1、yes、on或其他任何情况。

    我不清楚 NSPredicate 由于1)我的语法如何处理 nil null 值或2),因为它对于属性的类型不正确。

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

    NSManagedObject 类,我使用了 NSNumber 属性——因为据我所知,没有布尔属性,应该用一个来代替NSNumber。

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

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

    我的NSPredicate代码是:

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

    作为登录到控制台 isprivate != 1

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

    因此,可能是对nil或null值的解释有误。

    第二种可能性是,布尔/NSNumbers或其他类型的语法错误。

    如果以上布尔值设置为True,请提供有关如何筛选nsmanagedobjects的建议。

    提前感谢您的建议。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Patrick    8 年前

    将谓词与布尔值一起使用时,可以使用 @NO @YES .

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

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

        2
  •  0
  •   matt    8 年前

    您是否尝试了下面的代码,我通常使用整数表示布尔值。不要忘记更改CoreData中的类型

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