IOS/Core-data/Objective-C: NSPredicate 布尔值
IOS/Core-data/Objective-C: NSPredicate with Boolean values
在表视图的 NSFetchedResultsController
中,我试图过滤掉属性为 true、1、yes、on 或其他任何情况的情况。
我不清楚 NSPredicate
是否没有按应有的方式运行,因为 1) 我的语法如何处理 nil
或 null
值,或者 2) 因为它不正确对于属性类型。
在 xcdatamodeld 文件中,该属性设置为布尔值。
在NSManagedObject
class中,我用了一个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
吗?
在表视图的 NSFetchedResultsController
中,我试图过滤掉属性为 true、1、yes、on 或其他任何情况的情况。
我不清楚 NSPredicate
是否没有按应有的方式运行,因为 1) 我的语法如何处理 nil
或 null
值,或者 2) 因为它不正确对于属性类型。
在 xcdatamodeld 文件中,该属性设置为布尔值。
在NSManagedObject
class中,我用了一个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
吗?