NSPredicate在swift中检查对象类的种类

时间:2015-06-16 09:52:35

标签: ios swift core-data

我有以下核心数据模型:

enter image description here

现在我想获取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中我无法做到这一点。所以我不知道只找到具有指定类的对象。

1 个答案:

答案 0 :(得分:2)

您可以NSPredicate使用block,如下所示:

let predicate = NSPredicate { (evaluatedObject, _) in
    return evaluatedObject is NSNumber
    // or
    // return evaluatedObject.isKindOfClass(NSNumber)
}

let predicate = NSPredicate(format: "SELF isKindOfClass:%@", argumentArray: [NSNumber.self])