【发布时间】:2023-03-30 19:10:01
【问题描述】:
我有以下核心数据模型:
现在我想获取所有类型为 CDOnlineContact 和 CDOfflineContact 的对象。所以我有以下 fetchedController:
let fetchRequest = NSFetchRequest(entityName: "CDContact")
fetchRequest.predicate = NSPredicate(format: "??? %@", CDOnlineContact, CDOfflineContact) // <-- Here find only the object of class CDOnlineContact and CDOfflineContact
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "fullname", ascending: true)]
let controller = NSFetchedResultsController(fetchRequest: fetchRequest,
managedObjectContext: self.context.managedObjectContext!,
sectionNameKeyPath: "firstLetter",
cacheName: nil)
controller.performFetch(nil)
我在objective-c中找到了一些解决方案...
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [NSNumber class]];
,但不幸的是,我无法像这样快速检查课程。 仅使用查询:
mySecretObject is CDOnlineContact
在 NSPredicate 中我不能这样做。所以我不知道只找到具有指定类的对象。
【问题讨论】:
-
可能更好的方法是在 CDProfile 实体上创建一个新属性,如 onlineOfflineContact,当 CDOnlineContact 或 CDOfflineContact 在 willSave 方法中保存时,您可以将此布尔值设置为 yes,默认情况下为 NO。这样你就可以使用像“onlineOfflineContact = 'YES'”这样的简单谓词来获取联系人
-
@GeneratorOfOne 谢谢,如果无法查询类,那么您的解决方案是个好主意。另一种解决方案是,如果类的名称存储在属性中。