【问题标题】:NSPredicate for NSNumber property of NSManagedObjectNSManagedObject 的 NSNumber 属性的 NSPredicate
【发布时间】:2026-01-08 01:00:01
【问题描述】:

我有NSManagedObjectNSNumber * year 属性,它在数据模型中的类型是Integer 16

我尝试与NSPredicate 核对今年的情况,但找不到合适的。

我尝试了什么:

NSPredicate *p = nil;
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
NSNumber *yearNo = [nf numberFromString:term];
if (yearNo) {
    p = [NSPredicate predicateWithFormat:@"(cars.year == %i)", yearNo.intValue];
}

我也试过了:

NSPredicate *p = nil;
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
NSNumber *yearNo = [nf numberFromString:term];
if (yearNo) {
    p = [NSPredicate predicateWithFormat:@"(cars.year == %@)", yearNo];
}

在这两种情况下,应用都会崩溃。

【问题讨论】:

  • 向我们展示获取请求或崩溃日志。

标签: objective-c core-data ios6 nspredicate


【解决方案1】:

如果您为您的模型提供更多详细信息,我们可以为您提供帮助。

但我认为问题出在cars。如果cars 对很多人来说,你需要一个修饰符

[NSPredicate predicateWithFormat:@"ANY cars.year == %@", yearNo];

【讨论】:

  • 我的猜测是他想用给定的year 搜索Car 对象,在这种情况下谓词将只是"year == %@", yearNo
  • @MartinR 这也是可能的。如果需要,请添加您的答案;)
【解决方案2】:

正如@flexaddicted 已经说过的,您没有提供足够的信息,例如获取请求是针对哪个实体发出的。

如果你想用给定的year 获取Car 对象,谓词只是

[NSPredicate predicateWithFormat:@"year == %@", yearNo]

【讨论】: