2017-04-03 76 views
0

我有一個Device對象,它有很多Types。 在我的應用程序中,我需要查詢一些特定類型或一組類型的設備。 所以主要功能使用:如何使用IN sql子句查詢coredata?

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

假設實體Devicetype字段是String類型,使用一個字符串Array

var typesStrings = [String]() 
for type in types { 
    typesStrings.append(type.rawValue) 
} 
... 
deviceFetch.predicate = NSPredicate(format: "type in (%@)", typesStr) 

如果是Types類型。簡單地採取給定的陣列馬上︰

deviceFetch.predicate = NSPredicate(format: "type in (%@)", types) 
+0

感謝它的工作原理,但我將'Device.Type'從'Enum'轉換爲'Int',謝謝 – wajeeh