CoreData-仅使用通用方法获取特定的子托管对象

时间:2018-08-14 12:48:30

标签: swift core-data

我有一个奇怪的问题:

我有一个名为CustomItemTemplate的{​​{1}}。它具有许多子托管对象,例如SpecialItemTemplateviewController

现在我有一个列表ItemTemplate,该列表应该显示这些子托管对象。例如,仅“ CustomItemTemplaze”或仅“ SpecialItemTemplate”。我编写了这种通用方法来获取所有private func loadTemplates<T: ItemTemplate>(ofType type: T.Type) -> [ModelObject] { // ModelObject is just a model for my managed objects var templates = [ModelObject]() do { let request: NSFetchRequest<ItemTemplate> = ItemTemplate.fetchRequest() let result = try mainViewContext.fetch(request) for item in result { if item is T { // this is somehow always true templates.append(item.modelObject) // add the converted item to the array } } } catch let error as NSError { print("Error: ", error.debugDescription) } return templates } 并过滤出所需的子对象(我还没有找到更好的方法)。

enum Category {
    case custom
    case special

    public var templateClass: ItemTemplate.Type {
        switch self {
        case .custom:
            return CustomItemTemplate.self
        case .special:
            return SpecialItemTemplate.self
        }
    }
}


loadTemplates(ofType: currentCategory.templateClass)

我这样称呼它:

if item is T

但是,它没有过滤。 ItemTemplate对于每一项似乎都是正确的。因此,它将返回每个Replace,而不是仅返回某些子对象。

那是为什么?我无法解释。

感谢您的帮助!

0 个答案:

没有答案