NSManagedObject 类关系中的 NSPredicate 键

Posted

技术标签:

【中文标题】NSManagedObject 类关系中的 NSPredicate 键【英文标题】:NSPredicate key inside NSManagedObject class relationship 【发布时间】:2015-04-24 14:48:13 【问题描述】:

我有一个NSArray 这个NSManagedObject 类让我们称之为People,里面有一个与另一个NSManagedObject 类的关系让我们称之为Car,我想谓词第一个NSArray类,它将为我提供汽车的 ID。我是这样做的:

DbCar *c = [self.cars firstObject];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"car.idNum == %@", c.idNum.stringValue];
NSArray *sorted = [self.mainData filteredArrayUsingPredicate:predicate];
self.sortedData = sorted;

self.mainData 是一个 NSArray 持有“人”NSManagedObject

由于某种原因,我总是得到 nil。

提前致谢。

【问题讨论】:

您的谓词正在尝试匹配DbCar 实例上名为car 的属性。这似乎可能不正确,但无法确定。 DbCar 是否有 car 属性? 【参考方案1】:

对于NSNumber 类型的属性不需要传递该数字的stringValue 属性。直接将该数字对象本身作为参数传递给谓词,如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"car.idNum == %@", c.idNum];

这会有所帮助!

【讨论】:

我只是发现我不需要发送NSNumberstringValue,我可以发送NSNumber 本身或者它是integerValue 是的,你只需要发送`NSNumber`作为参数。

以上是关于NSManagedObject 类关系中的 NSPredicate 键的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 子类中的泛型类型

调用 NSArrayController 的 add 的 NSManagedObject 类调用指定初始化程序失败

在 Swift 中将 NSManagedObject 添加到 CoreData 多对多关系时防止循环

如何强制重新获取 NSManagedObject 的关系集

子类化一个 NSManagedObject 子类

将 NSManagedObject 与另一个 NSManagedContext(多线程)中的“相同”NSManagedObject 合并