如何使用IN sql子句查询coredata?

时间:2017-04-03 13:29:53

标签: ios swift core-data

我有一个Device对象,其中包含许多Types。 在我的应用程序中,我需要查询一些具有特定类型或一组类型的设备。 所以我使用的主要功能是:

func get_ByDeviceType(_ type: Device.deviceType) -> [Device]? {
    let deviceFetch: NSFetchRequest<Device> = Device.fetchRequest()
    deviceFetch.predicate = NSPredicate(format: "type == \(type.rawValue)")

    do {
        let device = try context.fetch(deviceFetch)
        return device
    } catch {
        return nil
    }
}

现在,当我尝试获得一组Devices时,我尝试了这个:

func get_ByDeviceTypes(_ types: [Device.deviceType]) -> [Device]? {
    var typesStr = ""
    var sep = ""
    for type in types {
        typesStr += sep + "\(type.rawValue)"
        sep = ","
    }
    let deviceFetch: NSFetchRequest<Device> = Device.fetchRequest()
    deviceFetch.predicate = NSPredicate(format: "type in (%@)", typesStr)

    do {
        let device = try context.fetch(deviceFetch)
        return device
    } catch {
        return nil
    }
}

但不幸的是它没有用,

是否有特定的方法来处理此案例。感谢

1 个答案:

答案 0 :(得分:1)

假设实体type的{​​{1}}字段属于Device类型,请使用String个字符串:

Array

如果是var typesStrings = [String]() for type in types { typesStrings.append(type.rawValue) } ... deviceFetch.predicate = NSPredicate(format: "type in (%@)", typesStr) 类型。简单地立即采取给定的数组:

Types